Cita: El problema que me encuentro si creo un único SELECT en lugar de crear tablas temporales, es que ejecuta cada subconsulta por cada fila encontrada,
Incorrecto, esto ocurriría en el caso de que la subselect estuviera dentro del select, al estar en el from, lo que hace la BD internamente es crear una tabla temporal con la select.
En cuestión de rendimiento, lanzar las 3 select (dejando de lado los insert) es más costoso que lanzar la select que yo te he puesto.
Si la velocidad es crucial podemos mirar como mejorar el plan de ejecucuión, pero te aseguro que la select que te he puesto es más rapida que las 3 que tu tenias.
Salu2