Separate onions and place them in a large Ziploc bag. Pour buttermilk over the onions, squeeze the air out of the bag, and refrigerate for at least an hour.
In a pie pan or shallow dish, combine flour, salt, cayenne, paprika, and pepper.
Heat oil in a skillet or deep pan to 375-degrees. Using tongs, dredge the onion rings a few at a time and place in hot oil for 2-3 minutes or until onions become nice and golden brown. Remove from oil and place on paper towels. Set aside.
For the beans and sauce:
Bring a pot of salted water to a boil (as if you were boiling pasta). Add beans and boil for about 5-6 minutes or until beans become crisp tender (boiling time depends on how crisp or soft you like your beans.. check them before removing). Drain and place in ice water to prevent further cooking. Drain and set aside.
Heat a large skillet to medium-high heat and cook bacon completely. Remove from skillet and drain on paper towels. Set aside.
Reduce heat to medium-low and drain all but about 2 Tbsp. of the bacon grease from the skillet (or you can drain it all and just use 2 Tbsp of butter). Sprinkle flour over remaining bacon grease (or butter) and stir, forming a roux. Whisk in chicken broth and bring to a simmer. Whisk in half-and-half a little at a time until sauce thickens. You want it to be a gravy-like consistency. Add a little milk if needed to thin the sauce. Heat for about 5 minutes or until sauce barely starts to simmer. Add pepper, to taste.
Preheat oven to 350-degrees. In a casserole or oven-safe dish, combine beans, sauce, cheese (optional) and half of the bacon. Sprinkle onion straws and remaining bacon over the top and bake for about 20 minutes. Serve immediately.
Prep time does not include the one hour of marinating the onions in buttermilk. Please allow extra time for this.