because it is a multiplication it is likely that it gets expanded to 64 bit anyway.
Otherwise it would raise a rangecheck error and/or overflow.
There are other simple hashes, like shift/mods, but this is indeed used in java.
Here is a simple hash without multiplication, stays 32 bit:
function SimpleHash(const S: string): Integer;inline;
var
i: Integer;
begin
result := 0;
for i := 1 to Length(S) do
begin
result := (result shl 5) or (result shr 27);
result := result + Ord(S[i]);
end;
end;
In most cases this is also faster and has similar characteristics.
I wonder why you do not want to use the text property, because that may still be faster than per line hashing + addition.