Solange du im Memo nichts änderst, ist die Geschwindigkeit nicht erheblich langsamer als bei einer Variable. Da jedoch Memo1.Text eine Eigenschaft (und eben keine Variable) ist, wird diese dennoch bei jedem Zugriff (also bei jedem Buchstaben) erneut ausgelesen, so dass die Geschwindigkeit dennoch langsamer als bei einer Variablen ist.
Grund:
Du willst Memo1.Text[i] lesen. Was passiert ist: Es wird Text gelesen, dafür gibts dann GetText oder eine ähnliche Funktion. Dann wird der i-te Buchstabe genommen. Es wird also jedesmal diese Getter-Funktion aufgerufen.
Den größten Performanceverlust hast du, wenn du auch noch im Memo etwas änderst statt in einer Variablen (deren Inhalt dann am Ende erst ins Memo geschrieben wird z.B.). Der Grund ist, dass bei jedem schreibenden Zugriff auf einen Buchstaben oder den kompletten Text im Memo dieses neu gezeichnet werden muss (es wird ja immer der Setter der Eigenschaft Memo1.Text ausgelöst). Und alle grafischen Operationen sind generell sehr schlecht für die Performance, insbesondere, wenn man sie in einer Schleife (in diesem Fall unbeabsichtigt) auslöst.