Preheat oven to 350℉. Prepare a 9x13 inch baking dish with cooking spray or butter and set aside.
Cook macaroni in boiling water for 5-6 minutes, keeping it slightly firm. Drain and rinse under cold water, and transfer to a large bowl. (Toss with a small bit of olive oil to prevent it from sticking together too hard)
Melt butter in a heavy-bottomed saucepan over low heat. Add flour and stir until completely combined. Cook 1-2 minutes. Add 2 cups of milk and stir to blend, stirring continuously until the mixture thickens. Remove from heat and add cheddar cheese, salt, pepper, paprika, and onion. Stir until cheese melts and sauce is smooth. Stir the cheese sauce into the cooled macaroni.
In a separate bowl, whisk the eggs with the ricotta and add it to the bowl of macaroni. Add remaining milk and cream and stir until combined. Stir in crumbled bacon at this time if using.
Place half of the macaroni mixture in the prepared baking dish and spread it evenly. Cover with strips of provolone. Top with the remaining macaroni and spread evenly.
Prepare the topping - Mix melted butter, bread crumbs, and parmesan cheese. Sprinkle the topping evenly over the macaroni.
Cover the dish with foil and bake for 30 minutes. Remove foil and continue baking another 10-15 minutes, or until macaroni is bubbling and the top is gently browned. Serve immediately.