1) Você tem alguns campos nas cláusulas Partition By e Order By. Isso não faz sentido, pois você terá um e apenas um valor para cada (sma.FastPer, sma.SlowPer). Você pode remover com segurança esses campos da parte Order By da função de janela.
2) Supondo que você já tenha índices para um desempenho adequado em "initialSmas i join initialSmas" e que você já tenha um índice para (initialSmas.Symbol, initialSmas.Period, initialSmas.TradeDate) o melhor que você pode fazer é copiar smaComparisonsByPer em um tabela temporária onde você pode criar um índice em (sma.Symbol, sma.FastPer, sma.SlowPer, sma.TradeDate)