Sweden international's late, late leveller keeps 10-man host's flickering Scudetto hopes alive
The Swede earned his side a point after Daniele Bonera had been dismissed, but Massimiliano Allegri's men have now handed the advantage to Juventus, who meet Roma later.
After a well-observed minute's applause for ex-Italy U21 Piermario Morosini, who tragically died playing for Livorno last weekend, Milan started sharply.
Serie A's leading marksmen Ibrahimovic caused early problems and forced Rossublu keeper Federico Agliardi into action before winning a free kick that Clarence Seedorf dragged wide.
Soon after the Seedorf-Ibrahimovic combination almost paid dividends, the Dutchman flinging over a cross that the Swede brought down neatly, but side-footed wide from 12 yards out.
With Milan's pressing proving fruitless, the visiting Rossoblu started to show glimpses of attacking threat, Gaston Ramirez squaring across the six-yard box when he could, possibly should, have tested Christian Abbiati in the Milan goal.
Ramirez learnt from his mistake seconds later when Alessandro Diamanti robbed Mark Van Bommel near the halfway line and slid through the Uruguayan, who took a great touch before firing low past Abbiati.
Bologna's tails were up, particularly the flamboyant Diamanti, who tried an audacious long-range effort from the middle of the park before stinging Abbiati's palms with a free kick.
Milan were a yard off the pace, but nearly scrambled an equaliser, Robinho wriggling free only to see his cross blocked by the visitors' Archimede Morleo, with Antonio Nocerino set to pounce.
However, with half-time approaching, the greater threat was posed by Bologna, who nearly made it 2-0 when Belgian Gaby Mudingayi easily muscled past Bonera and sent a snapshot only a yard wide of Abbiati's upright.
Milan emerged for the second half with their title aspirations on the line and they started the second period with intent - Seedorf firing an effort straight at Agliardi and Nocerino slicing wide from six yards after some trickery from Robinho.
With goals needed, Rossoneri boss Massimiliano Allegri sent on maverick Antonio Cassano for Seedorf, and the sub was soon involved in controversy - the Italy international releasing Ibrahimovic whose deft chip over Agliardi crossed the line. The Swede's joy was short-lived, however, as the goal was chalked off for offside - when replays showed he was clearly on.
The hosts now had the bit between their teeth and Robinho fired in a blockbuster on the hour mark that was excellently turned away by Agliardi. Cassano was then denied by defensive heroics from Rossoblu stopper Agliardi and Daniele Portanova.
The, with time running out, Ibrahimovic notched an important late strike, meeting Emanuelson's cross to bundle home and snatch a point.
But the draw sees Allegri's men clinging to the hope that league leaders Juventus will lose this evening against Roma, and keep their Serie A dreams intact.