Mitchell smashed through England's top order then cleaned up the tail to finish with 6-38 in a brilliant return after he was dropped for the second Test in Adelaide following a wayward, wicketless display in the opener in Brisbane.
The 29-year-old Queenslander's efforts sent Australia in to bat with an 81-run lead, but England's seamers hit back with three wickets after tea to leave Australia 119-3 at stumps.
Steve Finn removed Phillip Hughes for 12, coaxing a nick from the 22-year-old opener that went straight to Paul Collingwood's safe hands at third slip.
The young paceman then had Ricky Ponting caught behind for one, the struggling Australian captain feathering a catch off his glove to wicketkeeper Matt Prior.
Ponting, who has not surpassed 12 runs in his past four innings, was given not out, but England successfully appealed the decision to ensure the embattled 35-year-old receives another harsh reception in Saturday's newspapers.
Michael Clarke smashed four boundaries in an aggressive 20-run cameo but undone himself by chasing a Chris Tremlett delivery onto his stumps as Australia wobbled on 64-3.
Clarke's dismissal brought the hosts' serial rescuer Mike Hussey to the crease and the 35-year-old left-hander proved rock-solid again, adding an unbeaten 24 in a 55-run stand with opener Shane Watson (61 not out) to see Australia to a 200-run lead at stumps.
Trailing 1-0 in the five-Test series and harangued by a hostile local media after being bowled out for 268 on Thursday, Australia have seven wickets in hand and every hope of building a match-winning total on day three.
Much of the credit will go to their enigmatic paceman Johnson, who ignited the Australian attack in the morning session with a fierce spell of swing bowling.
After England raced to 78 without loss, Johnson caused Alastair Cook to miscue a drive straight to Hussey at gully, then trapped Jonathan Trott for four and Kevin Pietersen lbw for a duck.
Johnson grabbed his third lbw by dismissing Collingwood for five then celebrated his fifth and sixth wickets by bowling pacemen Tremlett for two and having James Anderson caught for a duck.
Johnson's withering spell had his fellow seamers bouncing and paceman Ryan Harris finished with 3-59 after dismissing England captain Andrew Strauss for 52, Ian Bell (53) and spinner Swann for 11.
Peter Siddle toiled in a fruitless morning session but was rewarded after lunch with a wicket when he bowled Prior for 12.
Australia are battling to level the five-Test series and prevent the tourists from becoming the first English team to take the Ashes home in 24 years.