You basically have two options for multitenancy:
1. Either you separate the database or schema at the connection pool level,
2. Or you use a single connection pool and switch the schema at runtime.
According to this
StackOverflow answer, the PostgreSQL SET search_path operation should be very fast and cheap. If you experience problems with the PostgreSQL schema setting, you should address this problem on the PostgreSQL forum. Maybe it was some issue that got fixed in a later version.
Vladimir Sitnikov suggested that SET search_path invalidates the Statement cache, which might explain your performance degradation issue.