Inter had made a good start to the 2014-15 season, winning two and drawing two of their opening four fixtures.
But they fell apart against Cagliari as Swede Ekdal made the most of captain Yuto Nagatomo's red card at the San Siro.
Inter, who had only conceded one goal prior to kick-off, fell behind early as Marco Sau gave the visitors a 10th-minute lead.
Southampton loanee Dani Osvaldo restored parity for the home side eight minutes later but it all went downhill from that point.
Inter's Japanese full-back Nagatomo saw red for a second bookable offence in the 27th, paving the way for Ekdal to take centre stage.
The 25-year-old put Cagliari ahead in the 29th minute and he completed his treble haul before half-time as Zdenek Zeman's men ended their three-game winless streak.
It could have been a lot worse for Inter after Nemanja Vidic conceded a first-half penalty but goalkeeper Samir Handanovic saved Andrea Cossu's effort.
Sampdoria moved up to third place in Serie A with a hard-fought 1-0 derby win over Genoa at the Stadio Luigi Ferraris.
In a repeat scoreline of their last meeting in February, Sampdoria emerged victorious courtesy of Manolo Gabbiadini's 75th-minute free-kick.
After coming close in the first half, Gabbiadini made the breakthrough 15 minutes from time, with his set-piece effort going clean through a crowded area and into the net.
The away win preserved Sampdoria's unbeaten start to the season after five matches, four points adrift of leading duo Juventus and Roma.
Genoa, meanwhile, have only won one of their past five fixtures this term.
Jose Callejon scored the only goal of the game as Napoli eased the pressure on coach Rafael Benitez at Sassuolo.
Callejon's 28th-minute strike handed Napoli a 1-0 win - ending the club's run of three games without a victory.
Napoli's triumph sent Sassuolo to the foot of the table.
10-man Milan earned a share of the spoils at Cesena after defender Adil Rami cancelled out Davide Succi's first-half opener.
Despite playing the final 17 minutes with a man less following Cristian Zapata's dismissal, Milan held on for back-to-back draws.
Torino and Fiorentina also played out a 1-1 draw.
Fabio Quagliarella delighted the Stadio Olimpico crowd with a 62nd-minute opener but Fiorentina hit back through Khouma Babacar 16 minutes later.
Chievo and Empoli also shared the spoils via the same scoreline.