Drugim rozwiązaniem jest tutaj najpewniej uzycie str_repleace żeby zmienic '.' na spacje, potem ucwords aby zmienic pierwsze litery na wielkie na koniec znów str_repleace. Nie jest to szybsze, lepsze ani czytelniejsze. Ogólnie nie widzę niczego złego w Twoim rozwiązaniu.
EDIT:
Choc po przemyśleniu można tutaj zastosować wyrażenia regularne, zapewne było by to znacznie szybsze no i prócz formuły dosyć eleganckie rozwiązanie, ale to już musi podpowiedzieć ktoś kto czuje się pwwniej w reg exp'ach. Ja nie chcę Ci namącić w głowie.
EDIT2:
O Boże ile ja dzisiaj robie tych 'editów'.
Wydaje mi się że to jest najlepszy sposób:
preg_replace('/([\.]|^)([a-z])/e', '"$1".strtoupper("$2")',$text);