Bueno esto es lo que yo uso para ordenar en un DBGrid utilizando ClientDataSets.
Código Delphi
[-]
procedure TForm1.DBGridTitleClick(Column: TColumn);
var
Campo: string;
begin
try
Campo := Column.FieldName;
with Column.Grid.DataSource.DataSet as TClientDataSet do
if IndexFieldNames <> Campo then
IndexFieldNames := Campo else
begin
AddIndex(Campo, Campo, [], Campo); IndexName := Campo;
end;
except end;
end;
Esto es gracias a que el ClietDataSet permite crear índices en memoria en tiempo de ejecucíon (Sin crearlos en la base de datos, claro). Espero que a alguien le sirva.