The veteran made early Rossoneri dominance count as he rose to meet a Theo Hernandez cross and head into the bottom corner. Early in the second half, Ibrahimovic doubled his tally from the penalty spot after Ismael Bennacer was clipped, rifling into the top corner.
The Diavolo enjoyed the best of the chances, whilst Bologna saw their dreadful run of league matches without a clean sheet extend to 33. Indeed, the visitors were hampered by the late dismissal of Mitchell Dijks for a culmination of fouls.
Milan started brightly and turned on the style, as Ibrahimovic began a move with a neat flick to Davide Calabria, before receiving the return pass and stepping away from Takehiro Tomiyasu with a wonderful drag back in the box, but the Swede’s low shot deflected just past the post.
Moments later, Theo found space to burst forward and cut back for Hakan Calhanoglu to drive wide, as the Rossoneri began to pour forward in attack.
At the other end, a quick counterattack saw Musa Barrow break to the edge of the box and tee up Nicolas Dominguez to strike from range, but it was comfortable for Gianluigi Donnarumma.
Milan came closest to breaking the deadlock on the half hour mark, with Ibrahimovic cutting back from the byline and forcing Lukasz Skorupski to palm the ball against Bennacer, only for it to ricochet over the bar from close range.
The Rossoneri’s pressure soon told as Ibrahimovic headed the hosts into the lead, rising highest to guide home a delightful Theo cross. The Swede found space to tower above Dominguez and give Skorupski no chance.
Within moments of kick off in the second half, substitute Alexis Saelemaekers stole possession and drove into the box, but his cutback was fired straight at Skorupski by Ibrahimovic.
From a resulting corner, Bennacer reacted quickest to a loose ball and was clipped by Riccardo Orsolini inside the box. Ibrahimovic stepped up and blasted his penalty into the top corner with venom as Milan put the result beyond doubt.
The Swede squandered a glorious opportunity to seal his hattrick midway through the half as he rounded Skorupski but blazed over with the goal at his mercy. Collecting Calhanoglu’s pass after Saelemaekers’ drive set up the move, Ibrahimovic did well to skip beyond the keeper but couldn’t apply the finish.
Milan kept the pressure on and came to close to a third, with Theo taking the ball on his chest and unleashing a thunderous volley. It forced a magnificent one-handed save over the bar from the alert Skorupski.
Donnarumma was finally called into action late on, but was on hand to get down low and keep out Andreas Skov Olsen’s effort in the box.
Bologna were not going down without a fight and Federico Santander turned an effort against the post in a crowded box, but their hopes were dashed when Dijks received a second yellow card for a cynical foul.