Subfloors are ideal-but check lumber prices. May be very expensive!!
Also-before laying the carpet-run a few 12th scale cars around on it and it will definately show you the dips and bumps that are hidden from the naked eye. If there are dips-you can level them like we did at the Gate with a self leveling quikcrete. If areas are too high-you might be able to grind them down, but its MESSY!!!