Soak the beans. Place beans in a large bowl and cover with water by at least 3 inches. Refrigerate for 8–12 hours. Drain and rinse.
Brown the ham. Heat bacon drippings in a large Dutch oven over medium heat. Add diced ham and cook for 4–5 minutes, until lightly browned. Remove and set aside.
Cook the onion. Add onion to the same pot and cook for 5–7 minutes, until softened. Stir in garlic and cook for 30 seconds.
Build the pot. Add beans, ham bone if using, broth, water, bay leaves, black pepper, garlic powder, and onion powder. Stir, scraping up the browned bits from the bottom.
Let it simmer. Bring to a boil, then reduce to a gentle simmer. Partially cover and cook for 1½ hours, stirring occasionally. Add water as needed to keep the beans submerged.
Return the ham. Stir in the browned diced ham. Continue simmering for 30–90 minutes, until the beans are completely tender. Older beans may need additional time.
Make that broth creamy. Remove the ham bone and bay leaves. Pull any meat from the bone and return it to the pot, discarding the bone, fat, and gristle. Mash about 1 cup of beans against the side of the pot and stir them into the broth. Simmer uncovered for 10–15 minutes, until thickened to your liking.
Taste and serve. Add salt only after tasting—the ham and broth bring their own saltiness. Let the beans rest for 10 minutes before serving. Serve with hot sauce, if desired.