Running the engine until warm (thermostat fully open) with the expansion tank cap removed is supposed to burp the system and get rid of all the air.
I have a similar problem with my Trevi. At first it seemed to be dirt in the cooling system collecting in the heater matrix. I flushed the system well and used a hosepipe to flush out the heater matrix and the heater started working but gradually lost efficiency. Seems to work for a while and at low speeds but goes cold after a long run and it's worse at higher speed. I had a 180 mile round trip yesterday and I was freeeeeeezing on the way back
In my case I think it's still dirt in the cooling system collecting in the heater matrix so I'll be giving it all another good flush soon. Maybe you have a similar problem? When was the last time you changed the coolant and have you flushed the cooling system?