Lo que yo he hecho en algun caso similar a este es crear un método en la clase (en este caso cliente) que devuelve el objeto como string.
Código Delphi
[-]
Self.FAsString := Self.FCodigo + '|' + Self.FDireccion + '|' + ...
Utilizando un separador.
En mi caso me sirve para temas de Debug, de exportación y para cuestiones como estas. En ese caso vadría con hacer algo similar a esto.
Código Delphi
[-]
if (Cliente.AsString <> ClienteViejo.AsString) then begin
...
No es nada muy sofisticado, pero a mi me funciona.
NOTA: En mi caso lo tengo a nivel de una clase Base que recorre todos los campos y hace la operación de concatenación, de forma que no se implementa en cada una de las clases, pero la idea es la misma.
Un saludo.