1) break the original text file up into about 200 chunks of a few hundred words each (always breaking on paragraph boundaries)
2) randomize the chunks
3) display each chunk with the font faded to almost invisible in a UI with a "play" button that revealed one... word... at... a... time at an appropriate reading pace (more on which below.)
I kept the original document open in an editor and made changes as I found them (there was also a "pause" button, obviously!) The application kept track of what chunks had already been proofed.
The randomization of chunks helped ensure I never got caught up in the story, but the word-at-a-time reading was what really made it powerful. There were still a few typos that crept past (there always are) but only two or three have been found by readers.
The important thing is maximizing the degree of surprise you have at discovering the next word. By tuning the reading rate appropriately I could digest one word and have a few tens of milliseconds pause before the next one showed up. This forced my attention to focus on what that word would be, and brought stylistic problems to the fore as well as simple typos.
The process is not fast: there is a "speed of light" for proof-reading that seems to be about 10 pages per hour (which is about what professional proof-readers do) and I found I could only reasonably do a few hours per day, but that was still only a couple of weeks to proof a 140,000 word novel.
This was also done after running the thing through various automated grammar checkers (LanguageTool was the most useful: https://www.languagetool.org/) which caught a lot of more mundane errors.
I also had a decent editor and excellent feedback from first readers, which is indispensable, but much more of the process can be automated than is generally believed.
It is a truism that authors can't proof their own work, but with the right attitude, reasonable tools and a modest amount of human backup it appears to be practical.