City stormed into a 5-0 lead before conceding three times in the final eight minutes before the break, but the closest either side came to adding to the score in the second half was an Alvaro Negredo shot that struck the Milan crossbar 11 minutes from time.
The first half of this Audi Cup clash had been breathless, David Silva slotting home City's opener after just three minutes before two goals in four minutes from Micah Richards and Aleksandar Kolarov had them 3-0 up midway through the half.
City, fielding a stronger side than Milan and further on in their preparations, added a fourth in the 32nd minute when Edin Dzeko got the first of his brace, the second duly rattled in four minutes later when he scored a fine volley on the turn.
But just in case they thought it was all too easy, Milan then scored three in six minutes. Stephan El Shaaraway broke clear to get the first in the 37th minute and then stayed alert to score a second two minutes later when City stopped, waiting for a whistle that never came.
Andrea Petagna suggested a comeback was on when he made it 5-3 in the 42nd minute, but that would prove to be the final score.
City will now face hosts Bayern Munich in Thursday's Audi Cup final after the German and European champions saw off Sao Paulo 2-0 in the other semi-final.
Aston Villa cruised to a 5-0 win over Walsall with five different players getting on the scoresheet at Bescot Stadium.
Fabian Delph and the on-form Gabriel Agbonlahor scored in the first half before Christian Benteke, academy midfielder Jack Grealish and Gary Gardner wrapped it up after the break.
In Scotland, Rangers drew 1-1 with Dundee at Dens Park.
Declan Gallagher headed Dundee in front shortly before half-time, just moments after Nicky Clark had headed against the post for Rangers.
But Arnold Peralta's first goal in a Rangers shirt, a fine free-kick just before the hour mark, levelled it up.