Visitors Milan led early in the match at the Stadio San Paolo, following a goal in the 12th minute from former Roma midfielder Alberto Aquilani.
Napoli wasted no time in levelling proceedings, with Uruguay international Cavani netting the equaliser from close range less than 60 seconds later.
The striker made it 2-1 on 36 minutes, receiving a Walter Gargano pass in a wide position before sending a curling effort beyond Christian Abbiati in the Milan goal.
Milan had chances to get back on level terms, with Aquilani denied twice just before half-time.
But Napoli made sure of the three points after the break, as Cavani completed his hat-trick with a vicious strike on 51 minutes.
While title-holders Milan are yet to register a victory from their first two matches, Napoli move joint top on six points, alongside Juventus, Udinese and Cagliari.
An Alessandro Matri goal in the 54th minute at the Stadio Artemio Franchi was enough to give Antonio Conte’s Juventus team a 1-0 victory over Siena.
Antonio Di Natale and Mauricio Isla both scored in the opening half-hour to secure a 2-0 win for Udinese at home to Fiorentina.
Atalanta continue to reduce a six-point deduction for match-fixing, registering a 1-0 victory over Palermo courtesy of a goal from Argentine striker German Denis. They remain bottom of the league table on negative two points, following a win and a draw in their opening two fixtures.
Goals either side of the break helped Lecce to a 2-0 away win over Bologna, with Guillermo Giacomazzi and Carlos Grossmuller on target for the visitors.
Maxi Lopez’s first-half injury-time penalty was all Catania needed to overcome Cesena 1-0.
Genoa came from behind to beat Lazio 2-1 in the Italian capital. Giuseppe Sculli had put the hosts ahead on 11 minutes, a lead they retained to the interval. But second-half goals from Rodrigo Palacio and Juraj Kucka ensured Genoa left the Stadio Olimpico with all three points.
A Sebastian Giovinco brace saw Parma defeat visitors Chievo 2-1 at the Stadio Ennio Tardini. Giovinco opened the scoring on 24 minutes, but the visitors looked to have escaped with a point when Alberto Paloschi equalised 10 minutes from time. But Giovinco struck once more, with the 90th-minute winner then overshadowed by his dismissal deep into second-half injury-time.