2. Yes, it is common to spend coin in multiple different addresses in the same transaction. You can either choose which addresses you wish to spend from (based on the inputs) or can let your wallet software choose automatically based on your preferences.
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 and that's what a wallet does automatically.
Caveat: A wallet will only do this automatically if the two addresses are within the gap limit. Otherwise it won't know the coins are there.
In addition to increasing the gap limit you could (1) keep track of the generated addresses in a separate database and use application logic to check for incoming / outgoing transactions or (2) send small amounts of coins just within your gap limit (e.g. if your gap limit is set to 100, you could reserve every 100th address for internal purposes and send a small token amount there to bridge the gaps).
Unfortunately I couldn't find anything on how large you can sanely set a gap limit. Maybe you can set it to 100k and it works just as well.