What about:
list = {{"foobar", 77}, {"faabar", 81}, {"foobur", 22}, {"faabaa", 8}, {"faabian", 88}, {"foobar", 27}, {"fiijii", 52}}; t = StringTake[#[[1]], 3] &; {t[#[[1]]], Total[#[[All, 2]]]} & /@ SplitBy[SortBy[list, t], t] {{"faa", 177}, {"fii", 52}, {"foo", 126}}
I'm sure I read a post, maybe here, in which someone described a function that effectively combined sorting and separation, but I can't remember it. Maybe someone can add a comment if they know about it.
Edit
ok should be a dream - how could I forget Gatherby
{t[#[[1]]], Total[#[[All, 2]]]} & /@ GatherBy[list, t] {{"foo", 126}, {"faa", 177}, {"fii", 52}}
Please note that for a fake list of 1.4 million pairs, this took a couple of seconds, so the method is not exactly super fast.