The day's play followed an all-too-familiar theme for the series, with England letting Australia off the hook and Johnson making them pay.
Earlier, Smith's 115 was his second century of the summer, and Haddin's 75 made him the first batsman in over 40 years to score a half century in every match of an Ashes series.
The pressure is firmly on England given their struggling batting order has managed just two totals greater than 300 this series.
Smith was the final wicket to fall, bringing an end to a fighting innings where he smashed 17 fours and a six.
Haddin was just as brutal, belting 13 boundaries in his knock of 75.
The veteran wicket-keeper has now scored four half-centuries and a ton from every first innings he has played this series and is in the form of his career.
Batting at No7, he's the second highest run-scorer this series.
England's hopes of stopping Australia record the third 5-0 whitewash in Ashes history were hampered further by a hamstring injury for fast bowler Boyd Rankin, one of three debutants for the tourists. Rankin went off just one ball into his second spell, and remarkably attempted a comeback only to break down again.
Australian openers David Warner and Chris Rogers went cheaply, and Michael Clarke and Shane Watson followed before lunch.
The Aussie selectors gave George Bailey another chance at No6, ensuring this Australia side goes down in history as the first to field an unchanged XI through a five-match series. The romanticism couldn't inspire Bailey, his spot in jeopardy after edging Stuart Broad for 1.
Stokes was on a hat-trick when he dismissed Ryan Harris (22) and Peter Siddle (0). He missed the milestone, but claimed Smith in the same over to end the innings with a flurry.
- AAP