You could make = active in math mode and add a thin space in \scriptstyle and \scriptscriptstyle using \mathchoice.
Adapting this nice @egreg's answer, use something like
\cs_new_protected:Nn \virgo_mathchardef:Nn
{
\tex_mathchardef:D #1 = #2 \scan_stop:
}
\cs_generate_variant:Nn \virgo_mathchardef:Nn { c }
\NewDocumentCommand{\FixOperatorInScripts} { m }
{
\virgo_mathchardef:cn { __virgo_letter_#1: } { \char_value_mathcode:n { `#1 } }
\cs_new:cn { __virgo_active_#1: }
{
\mathchoice
{ \use:c { __virgo_letter_#1: } } % \displaystyle
{ \use:c { __virgo_letter_#1: } } % \textystyle
{ \, \use:c { __virgo_letter_#1: } \, } % \scriptstyle
{ \, \use:c { __virgo_letter_#1: } \, } % \scriptscriptstyle
}
\char_set_active_eq:nc { `#1 } { __virgo_active_#1: }
\AtBeginDocument
{
\char_set_mathcode:nn { `#1 } { "8000 }
}
}
Example:
\documentclass{article}
\usepackage{amsmath}
\ExplSyntaxOn
\cs_new_protected:Nn \virgo_mathchardef:Nn
{
\tex_mathchardef:D #1 = #2 \scan_stop:
}
\cs_generate_variant:Nn \virgo_mathchardef:Nn { c }
\NewDocumentCommand{\FixOperatorInScripts} { m }
{
\virgo_mathchardef:cn { __virgo_letter_#1: } { \char_value_mathcode:n { `#1 } }
\cs_new:cn { __virgo_active_#1: }
{
\mathchoice
{ \use:c { __virgo_letter_#1: } } % \displaystyle
{ \use:c { __virgo_letter_#1: } } % \textystyle
{ \, \use:c { __virgo_letter_#1: } \, } % \scriptstyle
{ \, \use:c { __virgo_letter_#1: } \, } % \scriptscriptstyle
}
\char_set_active_eq:nc { `#1 } { __virgo_active_#1: }
\AtBeginDocument
{
\char_set_mathcode:nn { `#1 } { "8000 }
}
}
\ExplSyntaxOff
\begin{document}
\[ \sum_{x=3}x=3 \]
\FixOperatorInScripts{=}
\[ \sum_{x=3}x=3 \]
\end{document}
