I have received many payments from BitPay from different addresses to the same address, now I have to pay a $1.3k fee to transfer all my funds to a different address, that's because of the the huge number of inputs.. My question is, how can I prevent this in the future? Seems like the only way to avoid that, is to receive the payments from them in different addresses, but how can I do that? I don't feel like manually changing it after every transaction.
There's no way to prevent this. That's how Bitcoin works. "Addresses" are actually just an abstraction; they don't really exist the way our brain thinks about them. An address is just
part of the output.
Your problem is that you are receiving a huge number of UTXOs. When you try to use all those UTXOs to send a transaction, it takes significant block space, hence the high fees. Now that compressed keys are the norm, transaction size is generally calculated as follows:
in*148 + out*34 + 10 plus or minus 'in'
So a transaction with 5 inputs and 1 output will be in the range of ~779 bytes, as compared to a 1-input-1-output transaction which usually amounts to ~191 bytes. Transactions compete for block space via the fee market. At 200 satoshis/byte, the first transaction costs 0.001558 BTC. The latter transaction costs 0.000382 BTC. It doesn't matter how how many addresses are involved in the larger transaction. All that matters is the number of inputs and outputs.