Usando variáveis locais no filtro WHERE causa FULL TABLE SCAN. Porque o SS não conhece os valores das variáveis locais em tempo de compilação. Então cria um plano de execução para a maior escala que pode estar disponível para a coluna.
Para evitar o problema de desempenho, o SS deve conhecer os valores das variáveis em tempo de compilação. Definindo um SP e passando essas variáveis locais como um parâmetro é uma das soluções do problema. Outra solução é usar sp_executesql e passando essas variáveis locais como parâmetro novamente...
Ou você pode adicionar OPÇÃO ( RECOMPILAR ) no final de sua instrução sql para compilar suas variáveis locais. Isso resolverá o problema dos performans.