Quizá debas detallar más tu código. A mi me funciona bien usando MySQL y componentes MyDAC:
Código Delphi
[-]
procedure TForm1.MyQuery1CalcFields(DataSet: TDataSet);
begin
if ComboBox1.ItemIndex = 0 then
DataSet['nombre_completo'] := DataSet['apellido'] + ', ' + DataSet['nombre']
else
DataSet['nombre_completo'] := DataSet['nombre'] + ', ' + DataSet['apellido']
end;
Y en el evento OnChange del combo:
Código Delphi
[-]
procedure TForm1.ComboBox1Change(Sender: TObject);
begin
if ComboBox1.ItemIndex = 0 then
MyQuery1.IndexFieldNames := 'apellido'
else
MyQuery1.IndexFieldNames := 'nombre';
end;
Con esto, se ordena y el campo calculado cambia como se espera.
Bye