Frustrated by a pit mishap at Las Vegas a year ago, Stewart dipped below the two leaders from the second row to take the lead with about 30 laps left in the 400-mile race. He pulled away from Johnson on three more restarts over the final 17 laps for his first win on the 1.5-mile tri-oval in the desert.
Johnson made a run at Stewart with four laps left, but couldn't get around him or get close again. Johnson finished second after starting at the back of the field in a backup car.
Greg Biffle finished third, Ryan Newman fourth and defending Las Vegas winner Carl Edwards was fifth.
Stewart had the dominant car a year ago at Las Vegas, only to be tripped up in the pits.
He was penalized for leaving his pit stall with an air hose still attached and the team opted to take two tires on a later stop to get him back to the front.
Stewart did get to the front, but the rest of the teams saw that taking two tires would work and switched tactics. Forced to take four tires late in the race, he dropped to 22nd and ran out of time to catch Edwards, finishing second.
Stewart also had a good finish ruined last week at Phoenix after he turned off his car to save on fuel and couldn't get it to re-fire, a problem believed to be linked to NASCAR's new electronic fuel injection system. He was well back in the pack after a lengthy pit stop and finished 22nd after a 16th at the Daytona 500.
Stewart qualified seventh at Las Vegas and took his first lead on lap 135, beating Johnson on a restart. He lost the lead briefly on a cycle of green-flag pit stops and quickly regained it.
He turned back a challenge by Brad Keselowski and pulled away from Johnson on a final restart with four laps left to take the checkers at one of the few tracks he hadn't won at.
Johnson had to break out a backup car after a crash in practice on Saturday, sending him to the back of the field. He didn't take long to get the No. 48 car to the front, though, challenging Matt Kenseth for the lead by lap 83.
Johnson, who has never won in a backup car, overtook Kenseth 16 laps later and stayed there until Stewart beat him on a restart on lap 134. The five-time Sprint Cup champion stayed within range and was third coming out of a caution with 17 laps, then quickly passed Biffle for second.
Two more cautions caused by the Busch brothers followed, but Johnson couldn't keep up with Stewart on the restarts.
Dale Earnhardt Jr. dominated the early part of the race, leading 70 of the first 73 laps — 18 more than he had in all of 2011. He dropped back after taking four tires while nearly else took two during a caution on lap 74 and struggled with his car in traffic after that, finishing 10th to extend his winless streak to 132 races.
More Sports Headlines
Snohomish mixed martial artist returns to her first love Mariners beat Twins 4-3 in 11 innings 4:03 p.m. Charles scores 29 points, Liberty beat Storm 78-62 4:49 p.m. Park wins Women's British Open, captures 4th different major 4:38 p.m. Perry wins 2nd straight Champions Tour's 3M Championship 4:33 p.m. Merritt shoots 67 to win Quicken Loans National by 3 shots 4:30 p.m. Triple Crown winner American Pharoah wins $1.75 million Haskell Invitational 4:25 p.m. Bills' Ryan names Incognito starting left guard 4:22 p.m.
Our new comment system is not supported in IE 7. Please upgrade your browser here.