The current issue of Sojourners magazine contains a column by Rose Marie Berger, titled "What the Heck is 'Social Justice'?" She provides a nice explanation of the difference between charity and social justice:
Many Christians support acts of charity for the victims of social injustice. But I would argue that charity for the victims of social injustice is only a band-aid, even if a necessary one. Homeless shelters, for example, are a necessary response in a society like ours that sees obscene salaries going to the CEOs of major corporations while some people don't even have a place to live. But if our social and political system serves to support the interests of the rich and powerful, then a band-aid should be recognized for what it is--a stopgap measure. The Divine imperative as I see it is to go beyond mere charity, and to seek social justice.
Justice is the moral code that guides a fair and equitable society. When an individual acts on behalf of justice, he or she stands up for what is right. Charity is a basic sense of generosity and goodwill toward others, especially the suffering. Individual charity is when one responds to the more immediate needs of others—volunteering in a women’s shelter, for example.
The goal of social charity and social justice is furthering the common good. Social charity addresses the effects of social sin, while social justice addresses the causes of such sins. Brazilian Catholic Archbishop Hélder Câmara famously said, “When I feed the poor, they call me a saint; when I ask why they are poor, they call me a communist.” His phrase indicates the societal pressure to separate charity and justice. The two can not be separated. It would be like taking the heart out of a body—neither would live for long.