Cuando pulsas sobre un línea del grid, en realidad seleccionas un registro en el DataSet (TTable o TQuery) asociado. Para acceder a los campos de ese registro no debes hacerlo a través de las celdas del Grid, sino del DataSet:
Código Delphi
[-]
codigo := Table1.FieldByName('codigo').AsString;
desc := Table1.FieldByName('descripción').AsString;
...
Si ahora deseas buscar es otra tabla por esos campos, puedes utilizar como bien dices el FindKey siempre que tengas un índice definido por esos campos y lo utilices (con la prop. IndexName).