In my experience if you want to add custom markup the only way is to override the forms code renderings. You've just got to make sure when you do CMS upgrades that if you add a new version of forms nuget package that you compare the 2 versions of the raw markup to see what changes we implemented and add them to your custom code.
And, in addition to that, why don't you just keep the built-in TextBox and create a new custom element with name like TextBoxWithAutoComplete to have the functionality of both. And, at the time of upgrade please follow the suggetions given by Scott.
We have a client that is interested in adding the autocomplete attribute to the input fields on the our Optimizely forms for accessiblity reasons. Is there a recommended way to implement this functionality without making future upgrades to Optimizely forms more challenging?