The home side surged to victory on the final morning, claiming the last five wickets in less than an hour of play and only 10 overs.
England had been set 391 to win but were never in the hunt after resuming at 81-5 and finished all out on 123, with Ryan Harris taking 6-47.
Both Harris and Johnson, with 3-44 in the second innings, finished with nine wickets for the match.
The result sets up a blockbuster Boxing Day Test at the MCG in Melbourne.
Michael Clarke captained the Australian side on the final day, with skipper Ricky Ponting off the field after suffering a finger injury late on the third day.
Scoreboard at the conclusion of the third Ashes Test between Australia and England at the WACA Ground on Sunday:
Australia 1st innings 268 (M. Johnson 62, M. Hussey 61, B. Haddin 53; J. Anderson 3-61, C. Tremlett 3-63)
England 1st innings 187 (I. Bell 53, A. Strauss 52; M. Johnson 6-38, R. Harris 3-59)
Australia 2nd innings 309 (M. Hussey 116, S. Watson 95; C. Tremlett 5-87, S. Finn 3-97
England 2nd innings (resumed at 81-5):
A. Strauss c Ponting b Johnson 15
A. Cook lbw Harris 13
J. Trott c Haddin b Johnson 31
K. Pietersen c Watson b Hilfenhaus 3
P. Collingwood c Smith b Harris 11
J. Anderson b Harris 3
I. Bell lbw Harris 16
M. Prior c Hussey b Harris 10
G. Swann b Johnson 9
C. Tremlett not out 1
S. Finn c Smith b Harris 2
Extras (8lb 1nb) 9
Total (all out, 37 overs) 123
Fall of wickets: 1-23 (Cook), 2-37 (Strauss), 3-55 (Pietersen), 4-81 (Trott), 5-81 (Collingwood), 6-94 (Anderson), 7-111 (Bell), 8-114 (Prior), 9-120 (Swann), 10-123 (Finn).
Bowling: B. Hilfenhaus 10-4-16-1, R. Harris 11-1-47-6, M. Johnson 12-3-44-3, P. Siddle 4-1-8-0 (1nb).
Australia won by 267 runs
Series level 1-1
Man of the match: M. Johnson
Toss: England
Umpires: Marais Erasmus (RSA), Billy Doctrove (WIS)
TV umpire: Aleem Dar (PAK)
Match referee: Jeff Crowe (NZL)