Casemiro put Real ahead with a volley but Antoine Griezmann equalised after scoring a one-on-one.
Sergio Ramos restored the visitors’ lead with a penalty and Bale converted from Luka Modric’s pass to ensure the win.
Atletico ended with 10 men after Thomas Partey was shown a second yellow.
Real revival continues
In-form Real Madrid have now won six of their past seven games, having drawn 1-1 with Barcelona in the Copa del Rey semi-final first leg on Wednesday and this deserved derby win moves them to within five points of La Liga leaders Barca.
Santiago Solari’s side opened the scoring when Casemiro was left unmarked and he sent an acrobatic volley flying past Jan Oblak as Atletico failed to clear a corner.
Atletico levelled as Griezmann chased onto an Angel Correa through-ball to slot under Thibaut Courtois, who had toy rats thrown at him by Atletico fans. The Belgian spent three seasons on loan at Atleti from Chelsea earlier in his career.
But Ramos scored his eighth penalty of the season to restore Real’s lead after Vinicius Jr had been fouled by Jose Maria Gimenez. Four of his previous seven had been ‘Panenkas’ – chipped down the middle – but this time he drove the ball into the bottom left-corner.
Vinicius was replaced by Bale in the second half and the Welshman smashed a low shot beyond Oblak for his landmark Real goal in his 217th game.
Atletico fail to turn up in poor performance
Atletico were lacklustre as they conceded two goals in the first half of a home game for the first time since moving to the Wanda Metropolitano in 2017 – and the fastest in La Liga at the venue.
Griezmann’s goal, their one good moment of the game, came after a long video assistant referee delay, but he had timed his run perfectly.
Atleti had thought they had levelled for a second time when Alvaro Morata, facing his former club, chipped Courtois brilliantly from outside the box – but the VAR team correctly ruled he was offside. Atletico had been unbeaten in 19 games before his loan arrival from Chelsea, but have lost both matches with him in the team.
A red card seemed inevitable for Diego Simeone’s side, who had six players booked and it eventually came when Partey fouled Toni Kroos for his second booking.