C.J. Bacher threw for a school-record 520 yards and five touchdowns, including the game-winner in overtime, as Northwestern pulled out a wild victory over Michigan State.