Saludos.
No especificas si lo quieres es realizar una pantalla para ejecutar búsquedas en tu aplicación.
Siendo así el caso, esa metodología que deseas aplicar no es recomendable para ambiente Cliente/Servidor; donde tienes una PC (Servidor) con la Base de Datos que te envía la data a través de la red hasta otra PC (Cliente).
Imagina el trafico de red que estarías generando enviando ese paquete de información aunque estés usando
TClientDataSet.
En mi opinión personal, un usuario no necesita navegar por 300,000 registros para encontrar uno especifico se supone que ya sabe de antemano cual registro necesita (o tiene una idea) lo que no sabe es donde esta localizado dentro de la tabla. Partiendo de este pensamiento debes de suministrarle al usuario la forma de buscar e incluso tú por dentro limitar la cantidad de registro que vas a mostrar; en caso de que no este dentro de ese grupo de registro que el usuario sea más especifico.
Ejemplo:
Código SQL
[-]
SELECT ID,codigo1,codigo2
FROM TTabla
Where codigo1 starting with 'Hola'
ORDER BY codigo1,codigo2
ROWS 300
En mi entorno de trabajo esta es la metodología que aplicamos y hasta ahora nos a funcionado bien.
Espero no haberte cansado con esta explicación.