Why is Naive Bayes so bad? How would you improve a spam detection algorithm that uses naive Bayes?

One of the fundamental flaws of Naive Bayes is that it makes a strong assumption that the characteristics are uncorrelated, which is rarely the case.
Decorrelating the characteristics to ensure that the assumption holds true is one approach to enhance a Naive Bayes-based algorithm.