As Seb indicated, there is an existing task where we have previously considered adding additional syntax to the CONSTRUCT
https://4js.com/support/issue/?id=FGL-01418. If this is something you want in the product, then as I said at the recent developer conference, now is the perfect time just after a major release to start saying, hey this is what I'd like to see in the next major release. So please contact your local support representative and say please add me to the list of requestors for FGL-1418.
Without raising expectations too much though, note the start date for FGL-1418 is 2007. From that you can imply that if it was a trivial issue, it would have been implemented a long time ago. So if we said ^ABC maps to LOWER(fieldname) = LOWER("ABC"), what if the user really wanted fieldname = "^ABC". etc. More requestors there are, more chance of being implemented.
What I will also point out is that Informix has historically been a case sensitive database. Customers migrating to other databases may have come across this as the target database maybe case insensitive so you have to take care at installation. A good example is SQL Server
http://4js.com/online_documentation/fjs-fgl-manual-html/#c_fgl_odiagmsv_041.html. More recent versions of Informix allow for case insensitivity
https://www.ibm.com/developerworks/data/library/techarticle/dm-1108caseinsensitive/index.html so that maybe one avenue you wish to explore.
Otherwise if you are looking at parsing where clauses and/or looking at GET_FLDBUF(fieldname) and/or using ui.Dialog.getFieldBuffer, to see what user entered into a field, I'll also point out that using multi-dialog allows you to get the where clause for each field e.g.
DIALOG
CONSTRUCT BY NAME sql_field1 ON field1
END CONSTRUCT
CONSTRUCT BY NAME sql_field2 ON field1
END CONSTRUCT
...
END DIALOG
LET sql_field1 = parse(sql_field1)
LET sql_field2 = parse(sql_field2)
However you are then probably getting into area of too much repeated coding, and then I'd suggest dynamic dialogs. You said your users were comfortable with the existing forms and you did not want to change them that much, your dynamic dialog code could use the existing form.
So if your existing code was ...
CONSTRUCT where_clause ON column1,column2,column3,column4 FROM s_form.column1, s_form.column2, s_form.column3, s_form.column4
END CONSTRUCT
that can become ...
LET where_clause = dynamic_construct("column1,column2,column3,column4","s_form.column1, s_form.column2, s_form.column3, s_form.column4")
where dynamic construct is a library function that does a dynamic dialog that does the CONSTRUCTs and parses the individual fields to apply your additional syntax for case insensitivity to generate the desired where clause.
Reuben