I don't see it as character assassination. She didn't just turn into a murdering psychopath and start slaughtering people for no reason. She did what she felt like she had to do. Two people or the whole group of dozens, including little children whose dying father had made her promise to look after? Yea, it's rough, but in this kind of post-apocalyptic world, sometimes you gotta do the math.
Carol has grown into a tough, pragmatic woman who does what needs done. That's been an ongoing arc through Season 3 and increasing in this season.
No, killing and burning Karen and David didn't stop the virus, but she didn't know that at the time. Her breakdown after the chat with Tyreese was IMO part guilt and part frustration.
Frustration at the virus spreading and her not being able to stop it, and guilt at now having to live with killing two people after finding out it didn't accomplish anything.