Rinse beans and pick out any small stones or broken beans. Place in a large bowl, cover with water by 2 inches, and soak overnight.
Drain and rinse soaked beans.
Heat olive oil in a large pot over medium heat. Add onion and cook 5 minutes until soft.
Add garlic, smoked paprika, cumin, and chili powder. Cook 1 minute, stirring constantly.
Add beans, 8 cups water, and bay leaf. Bring to a boil.
Reduce heat to low. Cover with lid slightly cracked and simmer 1 1/2 to 2 hours, stirring occasionally, until beans are tender. Add more water if the liquid drops below the beans.
Stir in salt and pepper during the last 15 minutes of cooking.
Mash about 1 cup of beans against the side of the pot to thicken the broth. Remove bay leaf.
While beans finish cooking, preheat oven to 400°F. Grease an 8x8 baking dish or 10-inch cast iron skillet.
Whisk cornmeal, flour, baking powder, and salt in a large bowl.
Whisk milk, egg, olive oil, and honey in a separate bowl.
Pour wet ingredients into dry ingredients. Stir until combined. Do not overmix.
Spread batter into prepared pan. Bake 20 to 25 minutes until golden and a toothpick inserted in the center comes out clean.
Cool cornbread 5 minutes and cut into 6 pieces.
Ladle beans into bowls and serve with cornbread.