Hales pummelled the shorter square boundaries while Buttler was equally dismissive of India’s bowlers in a record-breaking unbroken stand of 170 as England claimed a scarcely credible 10-wicket win.
India were viewed as marginal favourites to set up a mouthwatering marquee match against Pakistan at the MCG on Sunday but Hales (86 not out off 47 balls) and Buttler (80no off 49 deliveries) disabused them of that notion in jaw-dropping fashion.
While England had yet to click into gear, they were battle-tested in getting out of the Super 12s and they delivered close to the complete performance in front of a 40,094 largely pro-India attendance.
Hardik Pandya gave a glimpse of what was to come from England’s openers, slapping 63 off 33 balls in India’s 168-6, with some audacious hitting at the death helping his side add 88 in the last seven overs.
Adil Rashid stunted India’s charge, taking 1-20 in the middle overs, as England made light of the absences of injured pair Mark Wood and Dawid Malan.
Chris Jordan and Phil Salt came in as England altered their line-up for the first time in the tournament, with Buttler winning the toss.
KL Rahul flashed Ben Stokes’s first ball of the match through backward point but perished in the next over when Chris Woakes found additional bounce to surprise the opener and take the edge.
Woakes was lofted over extra cover for six by Virat Kohli, who otherwise struggled for timing alongside Rohit Sharma on a pitch, last used six days ago, where all of India’s batters had difficulty adjusting to the conditions.
Rohit’s scratchy stay ended when he hoicked into the air, caught well by Sam Curran, to depart for 27 off 28 balls, perhaps rolling the dice against Jordan as Rashid was proving tricky to get away.
Rashid found success by gradually bringing his speeds down. Operating at 100km/h (62mph) in his first over he was at 80km/h by the end of his spell, and was rewarded with the wicket of Suryakumar Yadav, who stepped away to open up the square boundary but sliced to the sweeper on the off-side.
Kohli became the first batter to reach 4,000 T20 international runs before surviving a tight lbw review after being floored by a Jordan yorker, while Hardik cleared the cover boundary with a terrific bottom-handed slap to kick-start a stuttering innings to that point.
Kohli unobtrusively moved to 50 off 39 deliveries before steering his next delivery to short third off Jordan, but by this stage the handbrake was off for Pandya, who was ruthless on both off- and leg-side.
He dealt with Curran’s variations expertly in a penultimate over yielding 20 and his only misstep was on to his stumps from the final ball of the innings as Jordan finished with a mixed bag of 3-43.
At the start of the pursuit, all eyes were on Buttler’s match-up against Bhuvneshwar Kumar, who had dismissed the England captain on five occasions in 32 balls. Bhuvneshwar, though, offered width and allowed Buttler to slightly redress the balance with three fours in the opening over.
Hales was soon into the act, picking Bhuvneshwar’s knuckle-ball and dispatching it straight down the ground, doing likewise to Mohammed Shami and then sweeping Axar Patel as England motored to 63 without loss at the end of the powerplay.
Patel, once more, and Ravichandran Ashwin were sent the distance as Hales dominated the union early on to reach a 28-ball fifty with India seemingly running out of options to turn to.
Shami, Ashwin and Hardik were unable to even offer containment as England raced past three figures and kept going. Hardik dropping short allowed Buttler to go back and club his first six and reach a 36-ball fifty.
Buttler was put down on 66 by Yadav running back from mid-off, with insult adding to injury as the ball trickled away for four.
England went past their previous highest partnership in this format – the 143 made by Hales and Michael Lumb in 2013 – and the writing was on the wall at this point and India were on their way to a fifth successive semi-final loss in ODI and T20 World Cups.
Buttler ensured a one-sided thumping with another six off Shami as England won with four overs to spare.