You are not permitted to download, save or email this image. Visit image gallery to purchase the image.
Big-serving American Isner overpowered world number one Novak Djokovic 7-6 3-6 7-6 and will face three-time champion Federer in Sunday's (local time) final, the Swiss having eased past Spaniard Nadal 6-3 6-4.
The second semifinal was delayed by three and a-half hours because of steady rain before Federer and Nadal came out for their heavily anticipated showdown, the Swiss dominating before sealing victory in one hour, 31 minutes.
Serving for the match at 5-4 and 40-30 on a chilly and blustery evening, Federer was briefly held up by a light sprinkling of rain before he powered down a 200kmh ace, his sixth in all, to book his place in the final.
"I just had a good day," 16-time grand slam champion Federer said in a courtside interview after winning 38 of his 40 matches since last year's US Open. "Another great match in tough conditions.
"We both expected rain in the match and it did rain a few times. I couldn't be more happy. I have played amazing against Rafa. He is a great champion.
'Tonight I felt good about my game, I guess I had a no-lose mentality," added the third-seeded Swiss, who had battled flu and a temperature earlier in the tournament.
"I've not felt great this week and I didn't expect myself to play so well tonight. This is sometimes when you can pull off the biggest wins of your career."
Watched by a near-capacity crowd under leaden skies, Federer broke twice winner Nadal in the second game of the match, ending a riveting exchange with an overhead forehand smash to lead 2-0.
However, the Spanish left-hander broke back in the fifth when the Swiss netted a forehand after the two players had treated the crowd to a sequence of absorbing rallies with superbly angled shots.
Federer regained control by breaking second-seeded Nadal in the ninth when the Spaniard's backhand floated long and he served out to love in the 10th, clinching the first set in 42 minutes with a forehand drop shot.
Oozing confidence and moving in typically elegant style, Federer again broke Nadal in the third game of the second after the Spaniard double-faulted to trail 0-40 before dumping a backhand into the net.
Nadal was also broken in the seventh, again double-faulting for 30-40 and then sending a backhand well wide after a protracted rally.
Serving for the match at 5-2, the Swiss surprisingly failed to hold as his opponent struck successive forehand winners after moving Federer from side to side with penetrating baseline shots.
Nadal held serve for 4-5 and Federer came from 15-30 down in the 10th to beat his rival for a 10th time in 28 meetings.
"The weather conditions, yeah, it wasn't easy to play but it was a good match," Nadal said after losing to the Swiss for only the second time in their last six meetings. "He played fantastic, and I just congratulate him."
Earlier, Isner blasted a total of 20 aces past the top-seeded Serb, the last of them a well-placed 215kmh serve to clinch the final-set tiebreak 7-5 and end his match after two hours, 45 minutes.
Isner, who had lost to Djokovic in their previous two meetings, threw his arms skywards in celebration before light drizzle began to fall on the showpiece stadium court at the Indian Wells Tennis Garden.
"That's why I play this game, is to be able to enjoy moments like that," 11th seed Isner told reporters with a broad grin after reaching the final in an elite ATP Masters 1000 event for the first time.
"It was very special when that last ball went by him and I knew I had won the match. Not many people can say they've ever beaten the number one player in the world.
"I'm gonna have another shot tomorrow to play in front of a packed house for a big tournament title."