If you know how the header named and if the naming is unique, then you can iterate through all columns of proxy.sourceModel() using headerData() and compares with expected name.
If you have control over implementation of source model, then there you can reimplement headerData() to return column number on Qt::UserRole, then call on proxy.headerData(proxy_col, Qt.UserRole).toInt() will give you column of source model.
Another trick which may work (or may be not) if sort model subclassed: you create "forbidden" non-existing index by calling createIndex(0,col).
way 3: is very low chances to work. I usually do something similar to way 2.