In a large stock pot, heat butter or olive oil over medium heat. Sauté onion and celery until tender.
Add garlic and sauté 1 minute more until fragrant.
Add ham stock and navy beans and bring to a boil. Reduce heat to low and simmer for about an hour or until navy beans are cooked through.
Add back ham from making ham stock (but not the crispy ham.) If there was not a lot of ham on the ham bone, you may wish to add additional diced ham. Also add in the carrots and corn. Simmer until carrots are tender.
Add milk, Vegeta and pepper. Taste and add additional seasoning if necessary. Note: if you don't have Vegeta, you can substitute vegetable or chicken bouillon. If you have neither, then use salt to taste.
Thicken soup with a flour and water mixture to your liking.
Lastly, add baby spinach and cook until leaves are just wilted.
Serve soup topped with crispy ham.