In doing so, City also finished off the Champions League hopes of Villa, who are now unable to reach the top four.
Carlos Tevez’s penalty and a smart finish from Emmanuel Adebayor gave City the upper hand against a tired-looking Aston Villa side before Craig Bellamy applied a late coup de grace.
The victory sets up a mouth-watering encounter with Tottenham at Eastlands on Wednesday night – the London side are just a point ahead in fourth place in the race for Champions League football.
Aston Villa’s own hopes of joining the elite in Europe, rekindled by a superb run in April, had been raised when John Carew struck first for the visitors but their challenge fizzled and then died out as the home side, brilliantly marshalled by Patrick Vieira, dominated.
Villa’s main tactic seemed to be to shoot on sight to test the nerves of Marton Fulop, the emergency keeper signed on loan from Sunderland amid some controversy in midweek.
Initially it worked and the first time Fulop put his hands on the ball was to pick it out of the net in the 16th minute.
The Hungary international had conceded seven on his last outing for Sunderland, and it was the worst possible start for the 26-year-old.
Stewart Downing slid a straightforward ball through the defence and Carew managed to get there ahead of Kolo Toure and slot it under Fulop.
Toure had an immediate chance to make amends but scuffed his shot from 10 yards, then Brad Friedel just managed to take the ball off the head of Adebayor.
Adam Johnson was off target from 25 yards before James Milner provided another test for Fulop with a difficult bouncing effort from distance, but this time the keeper was up to it.
City tried to up the tempo but it was Villa who nearly scored again. Carew and Downing combined again, but this time the Norway striker set up the midfielder who hit it almost too perfectly – the shot left his boot like a bullet but just swooped wide.
City then claimed a penalty after Tevez struck a stinging drive that appeared to hit Stephen Warnock’s hand and referee Mark Clattenburg judged it – probably correctly – as inadvertent.
Tevez went down in the area under Carlos Cuellar’s challenge but again failed to win a spot-kick, before Milner’s deflected shot was a couple of inches wide.
It was third time lucky in the 41st minute however as Johnson enticed Warnock into a rash challenge and this time Clattenburg – enjoying a good day – did point to the spot and Tevez smashed it down the middle for the equaliser.
The match then swung even further in City’s favour in one bizarre minute.
First, Carew rammed a shot from a tight angle against the crossbar and City went straight down the other end and scored. Vieira produced a perfectly-weighted through-ball for Johnson, who left Warnock on the seat of his shorts before keeping his cool brilliantly to tee up Adebayor for a close-range finish.
The second half began in a curiously muted atmosphere but Fulop was then in action twice in a minute to keep Villa at bay, tipping over Ashley Young’s looping effort and then parrying the corner under extreme pressure from Carew.
City then enjoyed a sustained spell of dominance without being able to make it pay.
Pablo Zabaleta landed a deflected shot on the roof of the net before Bellamy looked to have beaten Friedel – only for the American to produce a fabulous diving save to tip the ball past the post just when it looked as though it would curl in.
O’Neill threw caution to the wind for the last 20 minutes, sacrificing Warnock for an extra forward in Emile Heskey while 19-year-old striker Nathan Delfouneso, of whom much is expected, replaced Carew.
Adebayor was thwarted by a last-ditch tackle by Dunne as City pressed for a decisive third goal, with Tevez’s follow-up then blocked.
That third goal did come finally in the last minute as substitute Shaun Wright-Phillips went on a speedy run down the left and set up Bellamy to bend the ball expertly past Friedel.