Add water to a large Dutch oven or heavy bottomed pot and bring to a boil. Add a splash of olive oil, this will prevent the pasta from sticking together, and a dash of salt. Add the macaroni and cook for 6 minutes, or until al dente. Do not over-cook.
Drain the macaroni and set aside, splash some olive oil and stir, otherwise they will stick together.
Wipe down the same pot and place it back on the stove over medium heat.
Add butter and melt it by stirring with a wooden spoon.
Add flour, whisk and cook for about 1 minute to create a roux. Slowly, while still whisking, add in about 1/2 cup of milk.
Slowly continue to whisk in the remaining milk until the mixture is smooth, do NOT rush through this step.
If using, stir in the sour cream, it adds richness to the sauce and a bit of tanginess.
Add salt, black pepper, garlic powder, onion powder, mustard powder and paprika. Whisk to combine.
Reduce heat to low and stir in the cheddar cheese until fully melted. Add the Mozzarella cheese and stir until fully melted. Taste and adjust the sauce for salt and pepper. If the sauce is too thick, add a little more milk.
Add drained macaroni and stir to combine, taste the sauce again, if needed add more salt and pepper. If the sauce is too thick, add more milk, 1/2 cup at a time. If the sauce is too thin, add more cheese.
Serve immediately topped with chopped cooked bacon and chopped fresh parsley if desired.