Al ingresarlos sigue igual.
No puede ser que con indices sea igual de lento con sin ellos, no es posible, deberia haber cambiado de lento a inmediato. SI era de esperar que fuese lentisimo antes, pro no despues.
Asegurate de que has hecho el cambio realmente en la misma base de datos que usas al probar la aplicacion, otra cosa no se me ocurre para explicarlo.
Otra opcion: Añade el campo a tu tabla incial que te diga si el color ha de ser rojo modificando tu sql "principal" para que te de el dato como un campo más:
Antes:
select f.* from factura f
Ahora:
select f.*, (select count(1) from historia h where h.nro_fac=f.nro_fac and h.CONSULTA_CERRADA='T') en_rojo
from factura
Ahora solo has de comprobar que el campo "en_rojo" sea >0 para decidir si pones o no en rojo el label.
Con eso evitas abrir y cerrar una consulta, y podria hacer mas sencillo y rapido el proceso.
Aun así, si esos indices no estan ayudando por alguna razón, seguirá siendo lento.
Ah! El plan suele venir como una propiedad de los componentes que usas para conectar, siempre que sean especificos de firebird.
Yo uso FlameRobin para lanzar estas consultas, te da el "plan" en una pestaña, y la idea es que te da la lista de indices que va a usar: si te aparece la palabra NATURAL es que la consulta va a tardar mucho y necesitas un nuevo indice.
Eso si, asegurate mucho de estar siempre hablando de la misma base de datos, no vaya a ser que los indices esten en una y el programa utilice otra!