In general, the more joins and subqueries you have, the slower the query will be.
However, if you're properly paginating results and keeping your overall result set somewhat limited, performance shouldn't be an issue.
Another possible implementation would be to use a json field for all of your extraneous properties. This would allow for a more flexible schema, and also allow you to make multiple meta constraints without needing a separate subquery for each of them.
In practice, when I've gone for a meta approach, I first decide that everything is going to be meta. I keep that tune until I see a meta-related performance problem that I can't avoid. At that point, you could easily make a migration to elevate a meta property to an official column, which saves you a join/subquery.