Repecto a lo de filtrar el TClientDataSet (o cualquier TDataSet), matizar que esto dependerá de si tienes ya los datos cargados o no. Si, por lo que sea ya tienes todo el dataset en memoria, es mejor hacer el filtro, ya que toda la operación se ejecutará en memoria y no hará falta acceder nuevamente a la BD. En cambio, si los datos no los tienes en memoria, es un despilfarro cargar todos los registros de la tabla para después filtrarlos cuando puedes ejecutar la query parametrizada y solo traerte los registros que ncesites.
Ah! todo esto es aplicable si usas un SGBD, lo cierto es que con tablas planas, hagas lo que hagas te traerás todos los registros a local
y normalmente se aconseja trabajar con toda la tabla, es decir con el filtro.