Ich fang mal von hinten an:

Wozu das Const in der Funktion. Ich hätt gedacht daurch kann der Compiler eventuelle Optimierungen vornehmen.
Das const sagt dem Benutzer der Funktion, daß die Funktion diese Variable nicht ändern wird. Andere String-Funktionen tun das, diese aber nicht. Das hat mit optimieren nichts zu tun. Wenn du selber weißt, was die Funktion tut, kannst du das getrost weglassen.

Er ruft bei jedem Durchlauf, also für jedes Zeichen die Funktion StrLen auf, aber jedesmal mit dem incrementierten Pointer
Das muß er auch tun. s wird ja in der Schleife verändert (s++), also muß strlen neu berechnet werden. Und jetzt doch zum Optimizer: wenn s innerhalb der loop konstant wäre, könnte der Optimizer die Berechnung von strlen aus der loop nehmen und außerhalb berechnen. Dein for()

for (i=0; i<StrLen(s); i++)
ist einfach falsch, zumindestens beschreibt es nicht, was du meinst.

Das ganze macht man eigentlich viel einfacher, so in der Richtung:
Code:
while(*s) {
      ....
      s++;
}
Und Funktionen wie strlen() o.ä. gibts fertig in der libc, die schreibt man nicht selbst

MfG Klebwax