one trick I use for running i2c between boxes (not very far, though; on the same rack or shelf) is to use firewire cables and connectors. you can find them from old pc tabs (pci cards or expansion tabs on the back of PCs). its nice that they have decent red/black wires for 5v/gnd, then there are 2 shielded wires for data and that works perfectly for clock/data on i2c.
I love it when I don't have to make cables! and the connectors are cheap, somewhat easy to get, keyed and reliable enough. (I run i2c between audio boxes that I build, for remote control and a sort of 'management bus' between systems).
one thing has to be asked: does your requirement have to run at full i2c speeds and does latency and 'buffering' matter for your app? if not, the store/forward method I mentioned would work, but if you need full i2c speed, xbee serial won't be fast enough to encapsulate that. now, if you bonded a bunch of them and muxed (time division) them, ....