You won't beat the performance of a physical date table, but if you have less than about 2000 days in between the inactive and active dates and just need basic queries ad-hoc against it, then consider CROSS APPLY against the spt_values table.
Since I wasn't sure if if active and inactive dates where always on or before (some cases with active > inactive, and others with inactive <= active), this should work for either case:
select distinct
loannumber, activedt, inactivedt, dtvalue
from
smd..TABLE_NAME
CROSS APPLY (
SELECT DATEADD(DD, N.number, activedt) FROM spt_values N
WHERE N.number BETWEEN 0 AND DATEDIFF(DD, activedt, inactivedt) AND activedt <= inactivedt
UNION ALL SELECT DATEADD(DD, N.number, inactivedt) FROM spt_values N
WHERE N.number BETWEEN 0 AND DATEDIFF(DD, inactivedt, activedt) AND activedt > inactivedt
) N (dtvalue)
where
loannumber = '12345678'
This produced the results below for a single record loan number from 1/3 to 1/5:
loannumber activedt inactivedt dtvalue
---------- ---------- ---------- ----------
12345678 2017-01-03 2017-01-05 2017-01-03
12345678 2017-01-03 2017-01-05 2017-01-04
12345678 2017-01-03 2017-01-05 2017-01-05
If you need to get beyond 2000, there are additional techniques to UNION ALL to generate appropriate row counts quickly.