As suggested in comments, use a filing cabinet, ideally with hanging file folders that require no punch holes. But don't mix physical location and semantic organisation. This would be highly inflexible.

Do this instead: Note down a running number or date on each hardcopy. This is the call number of your hardcopy.* Now write down a range of numbers or dates on each folder, and file the hardcopies accordingly. For example, hardcopy number 143 goes into file 130-150.
To find and retrieve your hardcopies, use a catalogue, either on paper (unwieldy) or digital (better). The latter can be in the form of some database, BibTeX file or reference manager like Zotero. If necessary, just repurpose one of the lesser-used fields to store the call number (e.g. "note" or part of the "abstract" field).
In your catalogue, you can assign multiple tags and projects to each hardcopy, no matter where it's physically stored. This removes the need for duplicate hardcopies.
In case you want to temporarily reshelve some papers, say, for a project or because you take them to a conference, just assign a secondary "call-number" that describes the current location, like "widget conference binder" or "brief case". This isn't strictly necessary if, every few weeks, you put straying hardcopies back to where they belong, which is easy enough, since they now have an address written on them.
* You could also use more elaborate call-numbers based on some classification, but I prefer to keep things simple. A running number or date also maintains the only advantage of the pile "system": Quick retrieval according to "It must be here somewhere, I've only used it a week ago".