Rinse 1 pound of dried navy beans, discarding any split, broken, or discolored beans. Place the beans and 4 cups of hot water in a large, heavy pot or Dutch oven. Bring to a boil over medium-high heat, boil for 2 minutes, then remove from heat. Cover and let soak for 1 hour.
Meanwhile, finely chop 1 medium yellow onion (1 1/2 to 2 cups), 1 large carrot (1/2 cup), and 1 medium celery stalk (1/2 cup). Finely chop 2 garlic cloves. Dice 8 ounces of thick-cut cooked ham (1 cup).
After soaking, drain the beans in a colander and wipe the pot clean.
Heat 2 tablespoons of olive oil in the same pot over medium heat until shimmering. Add the onion, carrot, and celery, and cook, stirring occasionally, until fragrant and beginning to soften (about 3 minutes). Add the ham, garlic, bay leaves, black pepper, kosher salt, dried thyme, and dried rosemary. Sauté until fragrant (about 1 minute).
Add the drained beans and stir to combine. If desired, nestle 1 smoked ham hock into the bean mixture. Add 6 cups of low-sodium chicken broth and bring to a boil over high heat. Reduce the heat to medium-low and simmer gently, stirring occasionally, until the beans are tender (1 hour 30 minutes to 1 hour 45 minutes).
Remove the ham hock. Add 2 tablespoons of unsalted butter and stir until melted. Taste and season with more kosher salt as needed.