How can I set a custom per-person ringtones, but for texts and not calls?
I don't believe that there's a way to do this using the settings in the built in Messaging app, but there are 3rd party apps that can enhance the built-in app's notifications capability.

I use SMS Popup which lets you carry on using the built-in Messaging app to send and receive text messages, but replaces the notifications. Amongst the extra options it gives you are individual, per-contact customization of every aspect of the notification.