Balotelli smoothed the way for a comfortable night when he opened the scoring from the penalty spot after nine minutes.
Sulley Muntari and Mathieu Flamini put Milan out of sight before Balotelli secured his double just before the hour.
Milan remain in third and, with two games left, are four points clear of fourth-placed Fiorentina, who kept the fight up with a 1-0 win at Siena, who look set for the drop.
Gonzalo scored the only goal of the game meaning Siena, second bottom, have six points to make up in two games and need an almighty goal-difference swing to pull off a miraculous recovery.
But while Milan can dust off their passports, Inter Milan will be remaining grounded next season after their qualification hopes were dashed, meaning their 15-year run in Europe is at an end.
With the top five going into Europe and Inter unable to catch fifth-placed Udinese, their season is over. Salvation cannot even come from the extra Coppa Italia place, as that will go to either Roma or Lazio, who beat them 3-1 on Wednesday evening.
Inter were on the back foot early on as Samir Handanovic put through his own goal. Ricardo Alvarez did get them level, but Hernanes (pen) and Ogenyi Onazi finished them off, with Freddy Guarin's missed penalty providing further misery.
Juventus were crowned champions at the weekend and they showed why with a fine 1-0 win at Atalanta, who are now safe. Alessandro Matri got the only goal.
At the Stadio Renato Dall'Ara three second-half goals allowed second-placed Napoli see off Bologna 3-0. Marek Hamsic opened the scoring (53) and was quickly joined on the scoresheet by Edinson Cavani (pen, 63) and Blerim Dezemalli.
At the bottom, relegation still looms large for some clubs. While Siena may well be done for, Palermo, Torino and Genoa are scrapping to avoid filling the last spot.
The latter two, old friends off the field, played out a 0-0 draw that contained little incident tonight, and they are five and four points clear of Palermo respectively.
Giuseppe Sannino's side lost a five-goal thriller 3-2 to Udinese and realistically need two wins and a swing elsewhere to survive.
Luis Muriel got Udinese going before Fabrizio Miccoli equalised from the spot. Gabriele Angella responded, but Palermo gave themselves a chance again when substitute Abel Hernandez scored nine minutes from time.
Mehdi Benatia would strike a lethal blow to their chances, though, with a winner just two minutes later.
Those results also meant Sampdoria were safe thanks to a 1-1 draw against Catania. It could have been an even better result for the Blucerchiati, who led through Elio De Silvestri's first-half goal, but Nicolas Spolli earned the Sicilians a share of the spoils midway through the second half.
In the other game, Alejandro Rosi struck 10 minutes from time to secure Parma a barely-deserved win at Cagliari.