GTD has some good stuff about "inboxing" - identifying where tasks come from, gathering them, doing the quick ones right then, then filing the others as appropriate.
IME there's a limited amount any system can do about impossible situations though. The point of divorcing tasks from deadlines is that deadlines don't determine how long the tasks for them will take, let alone what else you also have to do. I used to triage ad-hoc requests based on the urgency/importance axes (apparently this is called the "Eisenhower Principle") as well as order they were received and, unofficially, "is this person an arsehole", but after a while, if you get two or more people saying their thing needs to be done tomorrow and there's only time for one of them, it's a social issue - requirements capture and expectation management. I'd try to find out what they really needed doing, and when they really needed it, which is exhausting and time-consuming and sometimes involves asking other people.
Having a formal process for submitting requests to fall back on did work because it's hard to argue with - I think all departments should have one. It's also an idea that appeals to bureaucracy-minded folk so can get put in place by them.