I think the big thing that I don't like very much about your solution here is that it doesn't really remove maintenance concerns, it minimizes them some and centralizes them, but doesn't remove them completely.
Also you would have to use a magic number (4) so you still have the risk of setting the string range to an incorrect value (especially when using copy/paste). This isn't much better then the risk of a typo during entering the string.
As you said, yourself, Reflection in to slow; maybe it's not a wise idea to use it in big projects.
And there is another problem with this method: in your method we can't refactor the process of raising the event in a separate method (e.g. RaisePropertyChanged), because if so, the reflection will return the name of the method, itself.
I haven't ever taught of using reflection this way, thanks a lot for sharing your knowledge