Fry bacon in a cast iron skillet over medium heat. Reserve 4 tablespoons of grease in the skillet.
Remove the bacon. Turn the heat down to medium low. Add 4 tablespoons of all-purpose flour to the grease.
Whisk the flour mixture constantly, or use a wooden spoon to stir until the flour is completely absorbed by the bacon fat.
Simmer for about 3 minutes over medium-low heat, stirring constantly. This is an important step that avoids lumps and eliminates the raw flour taste. Take care not to burn the flour.
Gradually add 2 cups of milk (a little at a time) to flour mixture and stir or whisk constantly while turning up the heat to medium.
Once everything is mixed together and no lumps have formed, turn down the heat and add cream. Stir until smooth.
Add salt, pepper and garlic powder if desired.
Continue to cook and stir the gravy until it is the desired thickness and drips from the spoon without clumping. If desired, crumble a slice of bacon into the gravy for added flavor.
Add more milk if gravy gets too thick. Continue to cook if gravy is thin.
Notes
When adding flour to the grease, stir until completely incorporated to avoid lumpy gravy.
Add milk in increments and whisk as you go. Pouring milk it all at once will cause lumps to form.
Store leftovers in the refrigerator in an airtight container for up to 3 days. Reheat in the microwave.
Unfortunately, gravy does not freeze well or it may curdle.