Two goals in seven second-half minutes, however, turned the match on its head, both from substitute Giacomo Raspadori, as he earned Sassuolo a surprise win.
On the day Milan withdrew from the proposed European Super League, a damaging loss means they sit second in the standings, nine points behind leaders Inter Milan, who play Spezia later on Wednesday, with a top-four finish far from guaranteed.
"We do not fear missing out, only great determination to qualify [for the Champions League next season]," Milan coach Stefano Pioli said.
Sassuolo coach Roberto De Zerbi said on Tuesday that he favoured boycotting his team's trip to Milan because of their role in the planned Super League, and he reiterated his opposition after the match.
"I confirm everything I said yesterday, but clearly the Milan players and fans are excluded from my speech," he said.
"I think I have not offended anybody and I do not have to apologise to anyone. I think I have taken a position to defend football that is my life."
The quality of Calhanoglu's opener, a curling effort from outside the penalty area that squeezed inside the post, was worthy of an elite division, but without Ibrahimovic, Milan offered little else up front.
All the attacking intent in the second half came through the visitors, with the quality of the 76th-minute equaliser all in the slick build-up play before Raspadori arrived to slot home.
The winner was all Raspadori's own doing, as he beat two men before drilling in a shot off the post, becoming the first player to score a Serie A double as a substitute against Milan since 1994-95.
Another home defeat - five of Milan's six league losses have come on their own patch - means victory for Atalanta at AS Roma on Thursday would lift them above Milan into third.