You could assign each user with their own address index and only assign it when user want to see the bitcoin address for deposit to reduce workload of the wallet software.
m / purpose' / coin_type' / account' / change / address_index
2. Is it possible to combine bitcoin from different addresses when withdrawing? Say there is one bitcoin in 1st address and there is one bitcoin in the 1,000,000th address. If I want to withdraw 2 BTC, will the wallet able to combine the bitcoin from two addresses in a single transaction?
Yes, it's possible.
No possible with our site service. Each users must have an address upon signing up. And also, that doesn’t really answer the question of having many unused addresses.
I don't see how problem of many unused address could be partially solved without making sure deposit address only generated when user want to see the deposit address.
If you insist each user must have a deposit address upon signing up, i only could think make custom software which focus on performance and able to scale for manage million address.
AFAIK there's no desktop wallet (Bitcoin Core, Electrum, etc.) which designed for such heavy tasks.