A good system would not give you unique addresses well not by its definition. Instead they would give you a time specific unique address. In other words it would be unique for x amount of time and then they would reuse that address if it did not receive anything in the given amount of time. The amount of time is usually 12-24 hours for 1 confirmation but can vary from provider to provider. Ideally you want to have one that allows sufficient time for network congestion while not open for too long that it hogs your resources constantly checking it. If you are a small merchant with little traffic it is not that bad to keep checking but once things start getting more and more traffic you will want to squeeze every bit out of performance.
Bitpay is probably the most popular in the last decade but custom payment processors seem to be taking over as of recent as people are wising up that they can cut the middle man out and make their own. Depending on your needs it might be worth considering that option.