That seems like a good solution to me in regards to the second server. I'm not quite sure what is meant be a "non-hosted" server however. Do you mean a server rack of my own and not a third party server or?
Non-hosted simply means that it is
not hosted (on a 3rd party hosting service).
Like a small server at your physical place, which is only used for this one task.
What sort of schedule would you suggest? Hourly? I feel the schedule would have to be frequent. The only issue I can see with the batching is that users would have to wait longer for their withdrawals instead of having them processed instantly?
This fully depends on what kind of service you are running.
Since you can have a setup with hot-/cold wallet, you can let people withdraw at any time (and batch transactions every X minutes).
You just have to keep your hot wallet filled enough to let people withdraw, but not too filled enough to lose too much in case of an incident.
I wasn't actually aware yo ucould use one public key to generate further public keys/addresses. I assume that is how most crypto sites generate their deposit addresses? Sorry if that sounds outright noobish but I'm not currently that well versed in the actual technical aspects of bitcoin hence why I'm asking the questions I am. Thanks for all the help and advice though, I really appreciate it a lot!

What actually is used when deriving public keys is the xpub (extended public key).
You can read about it here:
https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#Extended_keys.