Как сменить кодировку верхнего индекса из UTF-8 в windows-1251 на php?
Никак. 
в кодировке windows-1251 примерно 200 символов
в UTF-8 - миллионы.
Запихнуть миллион символов в 200 физически невозможно.
Поэтому либо перестать использовать у себя пещерную кодировку, либо городить ручную замену для всех неподдерживаемых символов, тупо строковой заменой.
В Windows-1251 нет символа "верхний индекс 2". Вот он и заменяется в mb_convert_encoding на знак вопроса, как любой отсутствующий в целевой кодировке символ.
iconv же, начиная с PHP 5.4.0 возвращает в таких случаях FALSE, если не указан признак //IGNORE.