The Welshman netted from 25 yards in the second-half after his team-mate James Rodriguez had given Real the lead before the interval.
Rafa Benitez’s side go through to face Bayern Munich in Wednesday’s final, leaving Spurs to fight for third place.
Tottenham got off to the brighter start and should have taken the lead after less than two minutes through Erik Lamela. The Argentine was picked out in the box by team-mate Kyle Walker, but could only fire over despite having plenty of time and space.
It was a rare bright spot in a dismal first half for Spurs, and Real soon took control. Jese, starting in attack in the absence of Karim Benzema, twice went close inside the first 10 minutes.
First, he hit the bar when played in by Luka Modric, then made some space in the Spurs area before forcing a superb save from goalkeeper Michel Vorm down low to his left.
Real continued to dominate, with the reunited pairing of Modric and Toni Kroos taking charge of Spurs’ makeshift midfield.
Tottenham’s creators such as Christian Eriksen and Lamela, however, were kept firmly at bay. The former’s effort from the edge of the area which was comfortably saved by Kiko Casilla was the only real moment of note from either.
After 36 minutes, Real took the lead through James, and it was all too easy for him. Isco found half a yard on the left before his whipped cross into the box was converted by the unmarked Colombian.
The second-half was a stop-start affair thanks to a host of substitutions from both teams.
Spurs did improve and look more comfortable after the break, but there was very little action until Bale found the net against his former side after 79 minutes.
The forward had been quiet for large parts of the game, but found the net from 25 yards thanks to a poor mistake from Vorm in goal for Spurs.
The keeper should have stopped Bale’s relatively tame effort, but let it squirm past him and into the net.
Real will now face Bayern in the final after the German giants beat AC Milan 3-0 later in the evening at the Allianz Arena.
Juan Bernat put them ahead with a deflected effort in the first-half, before Mario Gotze and Robert Lewandowski added two more in the latter stages.
Beaten Milan will now play Tottenham on Wednesday in the playoff for third.