As a followup to a conversation in this thread: http://www.diydrones.com/profiles/blogs/3dr-gps-mag-back-in-stock
I have successfully used this $15 sparkfun HMC5883L breakout board: https://www.sparkfun.com/products/10530
as an external compass on my APM 2.5.
Used the instructions here: http://copter.ardupilot.com/wiki/common-external-magnetometer-for-improved-performance/
The process is even simpler than those instructions, since the sparkfun board is already wired for 3.3V. Just connect four wires and cut a jumper on he APM to disable the onboard compass.
I wasn't able to source the correct cable from sparkfun, but got one that was 1mm OC instead of the 1.25 OC that the APM uses on the i2c port. A little very minor pin bending and hot glue to hold it in seemed to do the trick.
The HMC583L is the same sensor that's on the APM and on the 3DR external compass/GPS module.