In a large pot over medium-high heat, cook the bacon until crispy, about 8 minutes. Remove from the pot and transfer to a paper towel-lined plate.
To the bacon fat still in the pot, add 1/4 cup butter and melt completely. Whisk in the flour until well combined. Cook for 2 minutes to remove the raw flour taste. Add the onion and garlic. Stir to combine. Cook for 1 minute.
Slowly whisk in the milk and cream to prevent lumps from forming. Reduce heat to medium and cook until thickened, about 10 to 15 minutes, whisking often.
Season the sauce with salt, pepper, and nutmeg. Add more of each seasoning to taste. Reduce heat to medium-low to keep warm, stirring occasionally.
While the sauce is cooking, melt 1/4 cup butter over medium-high heat in a large pot. Add the spinach and cover. Cook until wilted. (see note if using a skillet) Carefully drain off any excess liquid in the bottom of the pot.
Add the spinach to the sauce and stir until well combined. Add the bacon to the spinach and stir to combine.
Transfer to a serving bowl and top with more bacon and parmesan if desired. Serve warm.
Notes
I like to use the prepared, bagged spinach as a timesaver for this recipe. You'll need either three 8-ounce bags of spinach or four 6-ounces bags.
If you're using a large skillet instead of a pot, or a pot that's not super huge, you will have to add the spinach in batches. Press down on the spinach already in the pot and then add more. Fold the hot spinach on top of the uncooked spinach to help distribute the heat.
Want to skip the bacon? Melt 6 tablespoons of butter in a skillet before adding the flour, and then proceed as directed.