Now if I commit locally (in the same master branch), push it, make a pull request, and they take 3 weeks to review it, what should I do if I need to work on some other bug in the meantime?
That's easy - every change you do in a forked repository should be ONLY in its own branch. You should NEVER commit to any branches that you inherit from forked repositories (otherwise it will be painful for you to maintain them - to refresh with the latest changes from the upstream repository).
How would it work if I created a separate branch for each bug, and committed changes only to the right branch for each bug? So then, I would create a branch, fix the bug, commit it, push, pull request and checkout to my master branch to work on other bugs simultaneously? Would my organization know which branch to look for when I make pull requests?
That's it. When you make a pull request you choose what changes/branches to put into request