Evidentemente, con esa cantidad de registros, nunca accedes a todos, solo a un conjunto que dependerá de requerimientos (algo obvio, pero es parte del razonamiento).
Entiendo que accedes a tablas nativas, no puedo deducir que estés usando un SGBD externo.
Para hacer la consulta, estableces filtros sobre las tablas originales (no puedo deducir de tus indicaciones que uses algún tipo de cursor). Query=Consulta.
Primer paso (supongo que lo tienes resuelto porque dices que la consulta es rápida) es tener un índice sobre cada filtro.
Segundo: Armar un cursor de la consulta con SQL SELECT (si hay más de una tabla, es la única forma de que se active RUSHMORE).
Ese select debe enumerar todos y únicamente los campos que necesitas visualizar, e incluir las claves primarias de las tablas involucradas.
Una vez que tienes cargadas los registros nuevos, los modificados y marcados los a borrar, hacer un proceso tipo lote, al cerrar el formulario (con aviso al usuario para que no se desespere, por si tarda). Como tienes las claves primarias de los registros de las tablas, no tienes más que hacer un SEEK() y LOCK + UPDATE (REPLACE) o DELETE, y UNLOCK para cambios y borrados o un INSERT INTO ... SELECT ... nuevos registros.
En tablas DBF, el borrado es lógico (no físico), el físico deberá "limpiarse" fuera del horario "usuarios" del sistema y correr en horario con uso exclusivo.
Otra posibilidad es trabajar con Buffers activos.
Saludos: Miguel, La Pampa (RA)