Cover beans with cold water in a bowl; soak in refrigerator overnight.
Heat 3 tbsp. fat in a large Dutch oven over medium heat. Season lamb with salt and pepper. Cook in batches, stirring occasionally, until brown, about 10 minutes. Remove lamb with a slotted spoon and set aside.
Roughly chop 2 onions and 3 carrots, then add to Dutch oven with 1 head garlic, 1 sprig thyme, and bay leaf. Cook, stirring occasionally, over medium heat until caramelized, 12–15 minutes. Add tomatoes and cook, stirring, for 1 minute, then add lamb and enough water to cover, about 6 cups. Allow to come to a boil, then reduce heat to low and simmer, skimming fat, until lamb is tender, about 2 hours. Liquid should not fall below half the height of lamb—add water if necessary.
Drain beans. Heat remaining fat in large saucepan over medium heat. Add beans and cook, stirring, for 7–10 minutes. Stud remaining onion with cloves, roughly chop remaining carrot, and add to beans with remaining garlic and thyme and enough water to cover, about 8 cups. Reduce heat to low, and simmer until beans are tender, about 30 minutes. Remove vegetables. Set aside.
When lamb is done, remove with a slotted spoon. Set aside. Discard bay leaf and thyme sprig. Purée vegetables and broth in a blender or food processor. Strain through a fine sieve and correct seasoning.
Preheat broiler. Drain beans, reserving cooking liquid. Transfer beans to Dutch oven, layer lamb on top, then pour in strained sauce and, if necessary, reserved bean cooking liquid to come up just to the level of the lamb. Combine bread crumbs and butter in a bowl, spread evenly over lamb, and broil until brown, about 5 minutes.