You're correct that GTD defines contexts by what resources are available and this works well I find for home tasks or for people who work in a variety of physical contexts. But for most of us who sit at a desk all day, everything would be just @desk or @computer.
In fact, the old style contexts like @phone or @computer are meaningless to me even when I am out of the office because - with my iPhone in hand and various cloud services - I always have those contexts available. (so there is no need to write them into the system).
So in that case it makes sense to define your own contexts . I have seen a variety of methods used including some of the good suggestions in the first two responses.
My own setups - I have used contexts (in a previous job) to map to "people" - ie the person I had delegated work to or the boss I was awaiting authorisation from or the client contact I needed to be present.
This is similar to David Allen's idea of @agenda-person-name where you can use a context to collect up all the items you need to discuss with someone when you next meet with them. (Searching on that context gives you the agenda for the meeting).
You asked if you need to multiply all of your contexts by each project. Essentially yes, but I would also say that you can allow yourself to not assign a context in some cases. eg if your work is all of a similar context and there are no constraining factors.
Perhaps it helps make sense of contexts if we talk about constraints rather than resources - So maybe you need to think - what are the constraining factors in getting your work done?
Some people travel a lot and so they need a context like @car or @flight for those things that they could do while travelling.
(It's interesting to note that in those cases you might want to put multiple contexts to one action because a phone call might be capable of being made on a long car journey (using hands free setup!) or in the office from your desk.
Several of the GTD apps allow this multiple context tagging.
Another suggestion for contexts is "level of mental energy available". So you could have tasks like filing, simple calls, form-filling, for days when you feel a bit tired and not creative/effective say. These might be context = @easy.
And then have @complex for your up-days when you are full of energy ready to tackle big tasks or difficult meetings :)
Priorities - I would definitely not use priorities in the contexts slot. In fact, I have heard David Allen speak against the use of priorities altogether - as if he does not favour the old fashioned A B C 123 style of to do list.
Personally I quite like prioritising so when I have a lot on, I take a handful of next actions for the day and prioritise them on a separate day-list so I can get focused and not be distracted by the entire next actions list. But that is strictly a disposable - for today only - kind of priority.
Recently I've changed job and as a result moved from using Outlook tasks for GTD, to experimenting with cloud services and I think I have settled on Nozbe.com
One of the posts above mentioned "time required" as a context - this is a great idea but one of the things I like with Nozbe is that it has the option to add "time required" as a separate field in the next action - and you still have contexts on top of that.
It also has a pleasing design that allows dragging and dropping items - in both action lists and project lists - into any list order - so I can effectively prioritise things by dragging them to the top of the list - so visually they jump out at me first. I'm using this to make sure my most important projects stay at the top of the list.
This is not meant to be an advert for Nozbe but just illustrating the points about priorities , contexts, and time and that - in some systems - all these can co-exist without destroying the essence of GTD.