Rinse and then soak the baccalà in a covered pot with enough water to cover. Place in the refrigerator. Drain and change the water every 4-6 hours for at least 24 hours, more if possible.
After the final drain, remove bones and skin from the baccalà then shred and set aside.
Add 4 tbsp. olive oil and the sliced potatoes to a heavy skillet and fry the potatoes for about 5 minutes. Add the water, turn the heat to a simmer, cover and cook for about 15 minutes.
Add 2 tbsp. olive oil to another heavy skillet and sauté the onion over low heat until soft and golden.
When the onions are ready, mix in the baccalà and ½ cup milk, then cover and simmer for 30 minutes, stirring occasionally. If the mixture becomes too dry, add more milk a little at a time.
While the baccalà cooks, prepare the besciamella. Melt the butter in a saucepan over medium heat and slowly add the flour while stirring until the flour is incorporated. Add the remaining milk and heat, stirring constantly until thickened.
Preheat the oven to 450 F.
When the bacalà is done, mix in the potatoes, besciamella and cream.
Transfer to a baking casserole dish and sprinkle the grated Provolone and Parmigiano cheeses and breadcrumbs on top. Bake uncovered for 15 min, then lower to 350 F and let it bake for another 20 to 25 minutes until the Baccalà con Panna is golden brown.