We don't have a good batch processing method.
So you could TRUNCATE as you said - probably not a bad method, especially for something this rarely used.

Or, try to catch the timeout.. use a timer to exit before we hit max exec time, or a shutdown handler.. and drop users back on a page say 'X reports delete, Y left.. continue deleting' .. but TBH this sounds harder than its worth.