Chaaaaaaaaa, creo que es la primera vez en un foro que alguien me dice compañero
Y que encima no me contradice
En cuanto a lo del problema original no leí el Select por completo puesto que la pregunta me pareció más orientada hacia el uso de tablas temporales y de ahí mi respuesta, pero son correctas las sugerencias de guillotmarc en cuanto a los índices.
En cuanto a la "simulación" de tablas temporales nunca he llegado tan lejos por lo cual poco puedo decir, pero sería interesante tener la posibilidad de tablas temporales en Firebird, tal vez en futuras versiones se piense en ello.