For a quick win, change your non-clustered index like so:
CREATE NONCLUSTERED INDEX [IX_BRFCLSeaWeekHis_QuoteType] ON [dbo].[BRFCLSeaWeekHis]
(
[QuoteType] ASC, Year
)
INCLUDE (
[CurrencyCode],
[RateTotal],
[SeaTotal],
[Total])
and your query like so:
WHERE QuoteType = @QuoteType
AND FCL.Year >= @YearFrom
AND FCL.Year <= @YearTo
AND (CASE WHEN FCL.Year > @YearFrom THEN 1
WHEN (FCL.Week >= @WeekFrom AND FCL.Year = @YearFrom) THEN 1
ELSE 0 END) = 1
AND (CASE WHEN FCL.Year < @YearTo THEN 1 WHEN (FCL.Week <= @WeekTo AND FCL.Year = @YearTo) THEN 1 ELSE 0 END) = 1
AND (CASE WHEN @Commodities IS NULL THEN 1 WHEN FCL.Commodity IN (SELECT Name FROM #Commodities) THEN 1 ELSE 0 END) = 1
AND (CASE WHEN @Carriers IS NULL THEN 1 WHEN FCL.CarrierID IN (SELECT Code FROM #Carriers) THEN 1 ELSE 0 END) = 1
with OPTION RECOMPILE.
For fast, accurate and documented assistance in answering your questions, please read this article.
Understanding and using APPLY, (I) and (II) Paul White
Hidden RBAR: Triangular Joins / The "Numbers" or "Tally" Table: What it is and how it replaces a loop Jeff Moden