I’ve done something similar as a prototype for service requests (for example provisioning a new server or getting an SSL certificate). Not in live service yet, but it seems to work.
What I did for those was create a new local page for each request type under
Once the validation was correct, the validated form fields were marshalled up as a block of text and submitted as the initial ticket content. I guess we could have used RT CustomFields, but as every request is different, this seemed simpler and was preferred by the team that will be getting the tickets appear in their queue. Each request form is a bit different due to different requirements, but once each is written they should rarely need to be touched - the tickets they generate are just normal RT tickets in the standard workflow.