If you deal with thousands of simultaneous requests I don't see how jobs would help with performance. They can help with organizing actions but not provide faster response.
In the first place you should have fast and finely tuned web server(s) / DB server(s) that can carry such load.
My Idea to use only one worker for the joining was to minimize database collisions if 1.5k users try to join the same events (which have less slots than needed)
Database collisions should be handled on database level - using database transactions, constraints etc. Queues are not for that purpose. Also, you app should act equally no matter you have 1 worker or 10 - otherwise queue becomes a source of problems instead of solving them.
If your users need to see response quickly (I think they do) maybe queued jobs with non-guaranteed time of starting is not your solution at all. Maybe you should handle all logic in one request, providing fast response to a user.