Nested Loop Output Estimate Low when expanding dataset
That's the optimal plan for that query.  So you should consider storing the result.  One easy way is to use an Indexed View.

create view TacticItemsByDay
with schemabinding
as
SELECT  [TacticId], [ItemKey_A], [ItemKey_B], [From_Day_Idx], [To_Day_idx], [ddate], [Day_Idx] 
--INTO        #Results
FROM        dbo.TacticItems    TI
INNER JOIN  dbo.Calendar       CAL
ON          CAL.Day_Idx BETWEEN TI.From_Day_Idx AND TI.To_Day_idx

go

create unique clustered index ix_Results on TacticItemsByDay(TacticId, ItemKey_A, ItemKey_B, Day_Idx)