Pick and discard any "bad" beans.
In a deep pot over medium heat, bring about 10 cups of water (or enough to cover beans at about 3 inches) to a boil. Add beans and continue to boil, skimming scum that floats on top. Add quartered onion and peeled garlic.
Lower heat, cover, and simmer for about 1 to 1 1/2 hours or until beans are soft. Add about 1 tablespoon of salt and continue to cook for about 10 to 15 minutes or until liquid is thickened to a soupy consistency. Add more water as needed during cooking to maintain about 8 cups.
In a pot over medium heat, add bacon and cook, stirring occasionally, until it begins to crisp and render fat. With a slotted spoon, remove from pan and drain on paper towels. Discard fat.
Add chorizo and continue to cook, breaking apart with the back of the spoon, until lightly browned. Discard meat.
Add chopped onions and garlic and cook until limp. Add tomatoes and cook, mashing with the back of the spoon, until softened and begins to release juice. Add jalapeno pepper and continue to cook for about 1 to 2 minutes, stirring regularly.
Add cooked beans and liquid (about 8 cups). Bring to a simmer for about 10 to 15 minutes to allow flavors to develop. Season with additional salt to taste.
Ladle into bowls and top with cilantro if desired.