If you can run pgbouncer in "transaction pooling mode", you're best off. There are a few features that if use will not work with that, but if you don't use them for that.
default_pool_size then controls how many connections you have between pgbouncer and postgresql, and leaving that at something like 20 is probably a good idea. That means you can have 20 simultaneously active transactions in the system, and from the description of what you're doing that seems unlikely. But you want to adjust that value to be a value with a "reasonable margin" over the maximum number of simultaneous transactions you need. pgbouncer will then happily multiplex your 2000 connections over these 20, maintaining good performance on the database side.