There's an experimental version that patches the game to have cache off only if it had already been turned off, e.g. with setmul. [experimental version removed and made the official version]. In other words, it prevents the game from touching the cache setting at all. If you test it, might as well set up a fresh copy of the game, just in case, though it doesn't matter whether you applied the previous patch or not.
It replaces the game's 'mov eax,1 - mov cr0,eax' with 'mov ebx,cr0 - or bl,1 - mov cr0,ebx'. It also replaces the game's 'xor eax,eax - mov cr0,eax' with 'and bl,0feh - mov cr0,ebx'. It doesn't seem to me that the ebx register is used in the meantime, so it should be fine, but who knows. I also don't know whether the game really wants all the cr0 bits to be 0 at the start. I assume what it's doing here is entering unreal mode, I don't know much about that mode but I don't think it requires anything more than bit 0 of cr0 to be toggled. This experimental version appears to work on my hardware, but whether it has effects later in the game I don't yet know.