wicketkeeper Jonny Bairstow caught behind for 21 and Monty Panesar lbw for a duck to wrap up the innings.
The 32-year-old left-armer also dismissed Joe Root for 15 with brilliant fielding, throwing down the stumps from mid-off with the England number three well short of his bid for a reckless single.
Two balls later Johnson, disbelievingly, took the simplest of catches at mid-off as Ian Bell lofted a horrid drive off the bowling of Lyon to be out for a golden duck.
That completed a collapse of 3-1, kicked off when paceman Peter Siddle trapped Michael Carberry in front after a dour knock that yielded only 12 runs from 81 balls.
England still held a lead of 182 after tea with six wickets in hand, but promptly imploded as Lyon combined with Johnson to mow through the tail.
Lyon struck to remove Ben Stokes for 19 to end a 44-run partnership with Kevin Pietersen, the spinner coaxing the all-rounder into a clumsy slog straight to Steven Smith at mid-on.
The 26-year-old struck again the second ball after drinks to bowl Tim Bresnan for a duck, and three balls later had his 100th when Stuart Broad was out for another duck by offering up a catch to Australia captain Michael Clarke at slip.
Lyon capped a banner day by dismissing Pietersen for 49 for his fifth wicket when the South Africa-born batsman slogged to Ryan Harris at long-off.
While Lyon enjoyed most of the plaudits, Haddin continued to be the thorn in England's side, with his first innings 65 making him the first batsman at seventh or lower in the order to post four first innings half-centuries in a series.
He also surpassed Englishman Alec Stewart's 378 runs on home soil in 1993 to become the highest-scoring wicketkeeper in an Ashes series, and his last wicket stand with Lyon added a valuable 40 runs.
James Anderson was the pick of England's bowlers with 4-67, with Broad taking 3-45, and Cook will lean heavily on his two seamers to back up and win the match for England.
"I'm not really sure that I can explain what happened (with the batting) if I'm