Для чего вы используете Function cm(Message: String): String;, на мой взгляд бесполезная функция. Так же в цикле for...to...do не хватает Break;, т.е. для чего перебирать дальше, если мы уже нашли...
Как говорят, оптимизации кода нет предела, но всё же я бы записал так:
Пример
Код:

function NextButtonClick(CurPageID: Integer): Boolean;
var
i: Integer;
path: string;
begin
if CurPageID = wpSelectDir then
begin
path := Uppercase(WizardForm.DirEdit.Text);
if (Pos(Uppercase(ExpandConstant('{pf}')), path) > 0)
or (Pos(Uppercase(ExpandConstant('{win}')), path) > 0) then
begin
MsgBox(ExpandConstant('{cm:SysDirSelect}'), mbError, MB_OK);
Exit;
end;
for i := 1 to Length(path) do
if path[i] > #122 then
begin
MsgBox(ExpandConstant('{cm:Cyrillic}'), mbError, MB_OK);
Exit;
end;
end;
Result := True;
end;