Natürlich hat der Index/Liste im DataSet.Fields nichts mit der Liste der Grid.Columns gemeinsam und per se darf nicht davon ausgegangen werden, dass diese Listen irgendeine Übereinstimmung haben.
Ja, wenn die Columns automatisch generiert werden, anhand der Fields des verknüpften DataSets, dann passt es zufällig (anfangs),
aber sobald man selbst an diese Liste Hand angelegt hat, halt nicht mehr unbedingt.
Da es auch keine ColumnByFieldName-Methode gibt (echt peinlich, denn sowas fehlt an vielen hauseigenen Komponenten von Embarcadero), mußt du eben selbst suchen,
und alle DBGrid.Columns[idx].FieldName durchgehen.
Ein Therapeut entspricht 1024 Gigapeut.