Kwiatkowski had been part of a large breakaway group that got away early on the mountain stage, and attacked from a reduced bunch with around 2km to go on the final climb.
He beat Ruben Guerreiro (Trek-Segafredo) into second and Serge Pauwels (Dimension Data) into third, with the peloton, containing Geraint Thomas, finally crossing the line at 1-47 down.
But Kwiatkowski was able to show he's begun the season in fine form, taking another stage win and the overall victory with it.
How it happened
The day began extremely quickly with riders looking for a last shot at victory, with a 31-man break eventually getting away and putting over four minutes into the bunch containing the race leader.
Riders in the break included Kwiatkowski and his Sky team-mate Michal Golas, as well as Guerreiro and Pauwels, along with big names like Tony Martin (Katusha-Alpecin), and Philippe Gilbert and Zdenek Stybar of Quick-Step Floors.
That group gradually whittled down through the tough day of climbing, with five ascents to take on. The break really fell apart with around 50km to go, with Lukas Postlberger (Bora-Hansgrohe) making a break for it alone.
Stybar jumped across with around 28km to go to join Postlberger, with both of them able to keep the chasers at bay by about 30 seconds or so.
As they approached the final climb however, Postlberger was unable to keep the pace and left Stybar up front alone with 11km remaining.
The Czech champion held the chasers of admirably, but the final climb was too much for him and he began to slow.
The reduced break behind was then able to close on him, and with around 2km to go, Kwiatkowski attacked and easily bridged to Stybar, immediately passing him.
Pauwels and Gerreiro made chase, also passing Stybar, but they couldn't do enough to bring back Kwiatkowski, who cruised home for victory at the top of the climb.
Behind, Geraint Thomas came in among a reduced peloton at 1-47, losing his title to his team-mate and dropping into second overall.
Volta ao Algarve 2018, stage five: Faro - Malhão (173.5km)
1 Michal Kwiatkowski (Pol) Team Sky, in 4-18-02
2 Ruben Guerreiro (Por) Trek-Segafredo, at 4s
3 Serge Pauwels (Bel) Dimension Data, at 8s
4 Stefan Kung (Sui) BMC Racing Team at 13s
5 Cesare Benedetti (Ita) Bora-Hansgrohe, at 15s
6 Dion Smith (NZl) Wanty - Groupe Gobert, at 17s
7 Simon Geschke (Ger) Team Sunweb, at 17s
8 Julen Amezqueta (Esp) Caja Rural Seguros RGS, at 23s
9 Ben Swift (GBr) (UAE Team Emirates), at 29s
10 Frederik Backaert (Bel) Wanty - Groupe Gobert, at 35s
Final overall classification
1 Michal Kwiatkowski (Pol) Team Sky, in 18-54-11
2 Geraint Thomas (GBr) Team Sky, at 1-31
3 Tejay van Garderen (USA) BMC Racing Team, at 2-16
4 Bauke Mollema (Ned) Trek-Segafredo, at 2-22
5 Bob Jungels (Lux) Quick-Step Floors, at 2-33
6 Jaime Roson (Esp) Movistar Team, at 2-49
7 Maximillian Schachmann (Ger) Quick-Step Floors, at 2-50
8 Serge Pauwels (Bel) Dimension Data, at st
9 Felix Grosschartner (Pol) Bora-Hansgrohe, at 2-51
10 Nelson Oliveira (Por) Movistar Team, at 2-54
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