Why not have the script call itself after every 1000 records or so, passing a pointer to the last row it processed, thus it just re-starts itself every 20 seconds or so and picks up right where it left off! Just keep track of where you are in the file (bytes, lines, whatever) and have a counter running...
As to NOT having a web based interface, point out to your client the value of a centralized master system with high ROI, low TCO, no need to roll out new versions of software to terminals/workstations etc, and how well the system can perform... One of my business units (partysite.com) has a web interface for customers to work with (it is afterall a web portal) and processes requests most of the time in under a second, at the most a couple of seconds, but the big thing to remember is that the database has OVER 1,500,000 records in it...
Scott...