Chelsea lost 1-0 at home to Leicester in another surprise result, with Jamie Vardy's winner allowing Arsenal to move level on points with their fourth-place London rivals after a 3-1 win over Burnley.
United are eight points back in the race for a top-four finish as goals from Marcus Rashford, Ander Herrera, Anthony Martial and a Jesse Lingard double in the Welsh capital meant that for once this season it was a good day for the red half of Manchester.
Liverpool opened up a four-point lead at the top with a highly impressive 2-0 win at Wolves on Friday to extend their unbeaten start to the campaign.
And City failed to cut the gap as they dropped points at home for the first time this season in a 3-2 defeat at the Etihad despite going ahead through Ilkay Gundogan's header.
Jeffrey Schlupp levelled for Palace against the run of play just after the half-hour mark and two minutes later Andros Townsend thumped a stunning volley into the top corner from well outside the area.
Pep Guardiola summoned Sergio Aguero from the bench soon after the break but City had a mountain to climb when Kyle Walker chopped down Max Meyer and Luka Milivojevic dispatched the resulting penalty.
"We cannot concede the penalty we conceded," said Guardiola. "We have to try and avoid it. Football is like this. Three shots on goal and three goals."
Kevin De Bruyne was also thrown on to try and turn the game around and his intended cross that flew in off the post brought City back into the game five minutes from time.
But despite incessant pressure, the champions could not find an equaliser, handing Liverpool a huge boost ahead of their trip to City on January 3.
"You don't produce that sort of performance by waving a magic wand or having a five-minute team talk," said Palace boss Roy Hodgson. "There's a lot of work that goes into that structure and we were excellent."
Man Utd transformed
The axe finally fell on Jose Mourinho's time in charge of United on Tuesday with the 20-time champions 19 points off the top after just 17 games and the decision to sack the Portuguese was justified by a transformation in performance from the side beaten 3-1 at Liverpool last weekend.
Paul Pogba was restored to the starting line-up and played a role in all of the visitors' first three goals as Rashford's free-kick, a deflected long-range strike from Herrera and a brilliant team goal finished off by Martial put United in command before half-time.
Both sides benefited from dubious penalty calls as Victor Camarasa briefly halved Cardiff's deficit in the first half before Lingard made it 4-1 after the break.
And another defence-splitting pass from Pogba freed Lingard to round off the scoring a minute from time.
Solskjaer, famous for the scoring the winner for United in the dramatic 1999 Champions League final against Bayern Munich, is refusing to give up on a top-four spot and spoke of his pride at taking the helm as caretaker manager.
"We're eight points behind -- our job is to take one game at a time," he said. "We always play well in the second half of the season, we always do."
United scored five goals in a Premier League game for the first time since Alex Ferguson's final match in May 2013.
"They are good players, they are very good players, talented players," Solskjaer said. "They've approached the game properly, worked hard. A Man Utd team should never be outworked."
Chelsea's first defeat at Stamford Bridge under Maurizio Sarri allowed Arsenal pull level on 37 points after two goals from Pierre-Emerick Aubameyang in a 3-1 win against Burnley, taking him to a league-best 12 for the season.
Mesut Ozil made his return to Unai Emery's starting line-up in the Premier League for the first time since November 11 and helped set up Aubameyang's opener.
Watford moved up to seventh by beating West Ham 2-0 while Bournemouth are eighth as David Brooks's double beat 10-man Brighton 2-0.
Southampton's upturn in fortunes under Ralph Hasenhuettl continued with a 3-1 win at Huddersfield.
And Fulham remain rooted to the foot of the table despite avoiding defeat on the road for just the second time this season in a 0-0 draw at Newcastle.