Otra opción que a veces utilizo yo y que resulta más rápida de implementar, aunque es posible que no tan eficiente, cuando se requiere algo similar a lo que planteas (objetos + campo de ordenación) es utilizar un TStringList.
Utilizo el campo como String (para definir la ordenación) y los objetos se almacenan en la propiedad Objects.
Sólo se puede utilizar si la conversión del campo se puede hacer a un string y la ordenación de este tipo es la correcta para el resultado esperado.
Código Delphi
[-]
var
TS:TStringList;
key:String;
begin
TS := TStringList.Create;
TS.Sorted := True;
TS.Duplicates := dupError;
...
key := <-- Campo clave para ordenación
i := TS.AddObject(key, obj)
...