Mein Rat:
Wenn's auch bei einigen tausend Daten noch schnell sein soll: Vergiss es!
Der Ansatz ist so weit verbreitet wie falsch! Halte die Daten in einer separaten Liste (z.B. TList) und nutze das Grid nur zur Anzeige. Alles andere ist nur für ein paar hundert Daten gut...
// edit1 - Hierzu eine (überzeugende?!)
Testanwendung
// edit2 - Du musst eine spezielle Vergleichsprozedur CompareStringGridRows() schreiben, die zwei Zeilen unter Berücksichtigung des Datums vergleicht, d.h. Reihenfolge von tag.monat.jahr umdrehen...