Sí, tengo índices en los sitios en los que puedo usarlos (una parte de la aplicación está en una base de datos que no puedo tocar, sólo acceder con consultas).
Al final he usado el método que me has recomendado de usar una tabla temporal en vez de un cursor, así puedo crear la cláusula where según los parámetros que me pasen para la selección inicial, lo que acelera mucho el proceso.