Bien, si de todas formas hay que mostrar todos los datos... el uso de ClientDataSet me parece aceptable. Lees todos los registros al entrar... con un pequeño cartel de espera (no debiera tardar tanto de todos modos), y luego con el ClientDataSet podes mantener indices en memoria y reordenar y reubicar registros muy, muy rápido...
Hasta luego.