Auch UInt64 wird bestimmt den Überlauf nicht verhindern.
Blödsinn! Gib' mal zwei 32 Bit-Integer an, deren Summe größer als 64 Bit ist. (Selbst bei Produkten ist das nicht möglich!)
Der Algorithmus ist nunmal so ausgelegt, das Überläufe entstehen und sogar beabsichigt sind

Noch mehr Blödsinn. Zeig' doch mal, wo im MD5-Algorithmus ein Carry oder Überlauf verwendet wird (selber

),
Gemeint ist vermutlich, dass du mit deiner Lösung quasi einen 32bit-Überlauf simulierst.
Das ist der normale Delphi-Wahnsinn. Es ist normal, dass ein Überlauf statt findet.
Ich finde es vernünftig, wenn Delphi die Überlaufprüfung standardmäßig aktiviert hat.
Wer kryptografische- oder Kompressionsroutinen schreibt, muss sich eh darüber Gedanken machen, in den anderen Fällen erkennt es ja wirklich einen Fehler.
Ein andere (viel langsamere) wäre: alles mit UInt64 rechnen mod 2^32. Das ist nämlich genau die Arithmetik die, gefordert ist.
mod 2^32 ließe sich in dem Fall auch mit
and $FFFFFFFF ausführen. Dann sollte die Geschwindigkeit nicht ganz so stark leiden.