Latest update: all passengers have now been evacuated from the ferry, including two people from Tyrol, two from Vorarlberg and one from Salzburg. The captain and four crew are remaining on board for now.
The Italian coastguard has reported that seven people have died in the high-seas drama.
The blaze, which rescuers said was now largely contained, was said to have started on the ferry's car deck in the early hours when the vessel was some 44 nautical miles northwest of the Greek island of Corfu.
"It's going to be a long night," Italian Prime Minister Matteo Renzi said on Twitter.
By early 06:00 am (0500 GMT) on Monday, a total of 251 passengers out of the 478 on board had been rescued, according to the Italian navy, as teams from Greece, Italy and Albania battled through the night.
Italian navy spokesman Riccardo Rizzotto said the weather was "so bad we need an extraordinary level of support" in the rescue operation.
The "Spirit of Piraeus" was expected in the Italian port of Brindisi on Monday at dawn with 49 survivors on board, including some 20 Greeks, according to a source close to the operation.
Athens said its army had sent a C-130 military transport plane to Lecce on Italy's southeastern heel to pick up Greeks who had escaped the flames.
Others were evacuated to hospitals near the city including a two-year-old Swiss boy, his four-year-old sister and their seven-months-pregnant mother, according to Italian media.
A Greek passenger who had fallen from an escape chute into the Adriatic Sea with his wife was found dead by Italian coastguards, despite repeated attempts at an air rescue amid six-metre (19.6-foot) waves.
His wife was safely plucked from the water and transferred to Brindisi.
'Burn like rats'
In desperate scenes earlier in the day, terrified passengers pleaded by mobile phone live on TV to be saved from the vessel, which was travelling from the Greek port of Patras to Ancona in Italy.
"I cannot breathe, we are all going to burn like rats - God save us," cried one of the ship's cooks in a call to his wife, she told journalists.
Alongside rescue efforts by a flotilla of ships, including nearby merchant vessels, helicopters were slowly winching passengers to safety up to seven at a time.
The stricken vessel was reportedly some 40 nautical miles from Otranto in southern Italy and 13 nautical miles from Albania's coastline.
Italian authorities have mobilised four tugs to bring the "Norman Atlantic" to Brindisi once the passengers and crew were evacuated, although it may be moved to closer-by Albania if necessary.
As darkness fell, the Italian navy said that a tugboat, the Marietta Barretta, had finally been able to attach itself to the ferry, raising hopes it could be stabilised sufficiently to accelerate the evacuation.
Greek passenger Nikos Papatheodossiou told Mega television that the towed ship was moving at a speed of around "two to three (nautical) miles per hour".
Freezing passengers huddled on the top deck and bridge of the ship told of their terror in calls to Greek television stations.
"We are on the top deck, we are soaked, we are cold and we are coughing from the smoke. There are women, children and old people," passenger Giorgos Styliaras told Mega TV.4
Another told the station that "our shoes were melting" from the heat of the fire when they were mustered in the ship's reception area.
Haulage company boss Giannis Mylonas, who was in contact with three of his drivers on the vessel, said there were between 20 and 25 tanker trucks filled with olive oil on board.
Ferry passed checks
Vessels close to the ferry, leased to Greek operator Anek Lines, rushed to give assistance after picking up its distress signal at 0200 GMT, the Greek coast guard said.
The Greek maritime ministry said 268 of the passengers were Greek, with the crew made up of 22 Italians and 34 Greeks.
The rest of the passengers included 54 Turks, 44 Italians, 22 Albanians, 18 Germans as well as Swiss, French, Russian, Austrian, British and Dutch nationals.
The captain of the ferry was named as 62-year-old Italian Argilio Giacomazzi.
The "Norman Atlantic" left Patras at 1530 GMT on Saturday and made a stop at the Greek coastal town of Igoumenitsa, before heading to Ancona when the fire took hold.
The car deck of the Italian-flagged ferry, built in 2009, was believed to have been holding 195 vehicles when the fire broke out.
It remained unclear how the fire started.
Carlo Visentini, the chief executive of the Visenti Group which owns the boat, said the vessel underwent checks on December 19 in Patras and the minor flaws revealed had been addressed, including a problem with a fire door.
"This was immediately repaired to the satisfaction of the inspectors," he said.