The method I've settled on is a (cheap) set of steel storage shelves. I have a bunch of labelled cardboard boxes (shoebox sized) stacked on those shelves, a box per major category (resistors, capacitors, ...). Inside the boxes are a bunch of (cheap) zip lock plastic bags, each holding a particular value component.
This system is versatile as bag sizes can be varied according to how much space is required. (eg. the surface mount box has lots of small bags). It's easy to add new components as you just break out a new bag and throw it in the appropriate box. Have a "miscellaneous" box for bits that don't fit in a category and if that box fills up break out an extra box or two and create some new categories for some of the "misc" stuff. You can customise what goes inside the box, such as anti-static bags for semiconductors, no bags at all for things that will stack in a box or a box full of loose odds and sods of wire.
Shoebox sized is small enough to easily search, but big enough to hold things. The upside down lid of the box can be used as a sorting tray whilst searching.