Yates (Mitchelton-Scott) went solo with around 4km to go and left the other general classification riders battling behind with Thomas (Ineos Grenadiers), Majka (Bora-Hansgrohe) and Aleksandr Vlasov (Astana) proving to be the best of the rest.
Michael Woods (EF Pro Cycling) finished in 11th at 1-46, losing his race lead and falling down the general classification.
How it happened
The queen stage of the Tirreno-Adriatico started with the riders leaving the town of Norcia and took in a very lumpy day of 202km before finishing up the Sarnano-Sassotetto climb, the only summit finish at this year's race.
A strong break went up the road that pulled out a maximum gap of six and a half minutes but it was brought down to around three minutes as Giovanni Visconti (Vini Zabù-KTM) was dangerous in the general classification.
The break was made up of Mathias Frank (Ag2r La Mondiale), Mathieu van der Poel (Alpecin-Fenix), Jhonatan Restrepo (Androni Giocattoli-Sidermec), Marco Canola (Gazprom-RusVelo), Carl Frederik Hagen (Lotto-Soudal), Héctor Carretero (Movistar Team), Amanuel Gebrezgabihier (NTT Pro Cycling), Julien Bernard (Trek-Segafredo), Edoardo Zardini (Vini Zabù-KTM) and Visconti.
Zardini dropped back to the peloton with about 55km to go as he didn't have the legs. A few kilometres later, Chris Froome (Ineos Grenadiers), hit the deck but luckily nothing serious and he got back on the bike.
Restrepo was the next rider dropped after he put in a couple of attacks to try and get away but clearly the Colombian did not have the legs.
In the bunch,EF Pro Cycling were joined by Mitchelton-Scott with 30km to go to help bring the break back before hitting the final climb.
Up front, Gebrezgabihier and Bernard attacked but Van der Poel dragged himself along with Visconti and Frank back up top them with 20km to go.
Bernard kicked again with Gebrezgabihier as the rest of the riders were caught by the peloton now lead by EF Pro Cycling and Astana with 10km to go.
Gebrezgabihier was the last rider to be caught as he pushed on solo looking to be out front for as long as possible as he searches for a new contract for 2021.
Portuguese national champion, Rui Costa (UAE Team Emirates), attacked right at the base of the final climb with Luca Wackermann (Vini Zabù-KTM) bridging across but EF Pro Cycling stayed calm with the pacing behind.
Costa was brought back very quickly with Wackermann continuing to push on the lower slopes of the climb but only pulling out seven seconds and was brought back with 8km to go.
Vincenzo Nibali (Trek-Segafredo) kicked with 6km to go as he tested himself on the climb but he didn't stay clear for long as Oscar Rodriguez (Astana) brought him back.
Stage four's stage winner, Lucas Hamilton (Mitchelton-Scott) and Nibali lost touch as Jakob Fuglsang attacked, forcing EF Pro Cycling to work, against brought back quickly with 5km to go.
An upping in pace by Rafał Majka (Bora-Hansgrohe) isolated Michael Woods (EF Pro Cycling) as Simon Yates (Mitchelton-Scott) made a move, with Gianluca Brambilla (Trek-Segafredo) and Fausto Masnada (Deceuninck - Quick-Step) following.
Vlasov and Majka bridged up to Masnada and Brambilla as Yates pushed clear and went on solo on the steepest gradients.
Behind, Geraint Thomas (Ineos Grenadiers) left Woods behind and bridged across to the group behind Yates with 4km to go.
Woods began to fade with riders leaving him behind as he loses a minute in the space of a kilometre.
The chase group was whittled down to Vlasov, Thomas and Majka who were just 15 seconds behind Yates with 2.5km to go.
Yates then held 30 seconds with 1km to go and looked exceptionally strong as Thomas and Majka worked together with Vlasov clinging on.
Yates took the win ahead of Thomas and Majka by 35 seconds. The Brit now leads Majka by 16 seconds and Thomas by 39 seconds with three stages to go.
Tirreno-Adriatico 2020, stage 5 - Norcia to Sarnano-Sassotetto (202km)
1. Simon Yates (GBr) Mitchelton-Scott, in 5-30-43
2. Geraint Thomas (GBr) Ineos Grenadiers, at 35s
3. Rafał Majka (Pol) Bora-Hansgrohe), at same time
4. Aleksandr Vlasov (Rus) Astana, at 39s
5. Wilco Kelderman (Ned) Sunweb, at 54s
6. James Knox (GBr) Deceuninck - Quick-Step, at 58s
7. Fausto Masnada (Ita) Deceuninck - Quick-Step, at 1-00
8. Jai Hindley (Aus) Team Sunweb, at 1-05
9. Gianluca Brambilla (Ita) Trek-Segafredo, at 1-11
10. Louis Meintjes (RSA) NTT Pro Cycling, at 1-46
Tirreno-Adriatico 2020, general classification
1. Simon Yates (GBr) Mitchelton-Scott, in 23-36-59
2. Rafał Majka (Pol) Bora-Hansgrohe, at 16s
3. Geraint Thomas (GBr) Ineos Grenadiers, at 39s
4. Aleksandr Vlasov (Rus) Astana, 49s
5. Fausto Masnada (Ita) Deceuninck - Quick-Step, at 54s
6. Wilco Kelderman (Ned) Team Sunweb, at 1-00
7. James Knox (GBr) Deceuninck - Quick-Step, at 1-21
8. Michael Woods (Can) EF Pro Cycling, at 1-22
9. Gianluca Brambilla (Ita) Trek-Segafredo, at 2-28
10. Jack Haig (Aus) Mitchelton-Scott, at 2-44
Thank you for reading 10 articles this month* Join now for unlimited access
Enjoy your first month for just £1 / $1 / €1
*Read 5 free articles per month without a subscription
Join now for unlimited access
Try first month for just £1 / $1 / €1