Here's a LuaLaTeX-based solution. It defines a Lua function, named do_subs, that performs substitutions on all the following two-letter and three-letter character combinations:
<== <=> ==> <= >= << >> <-- --> -+ +- ... == <> =. =( =) =[ =]
By assigning this function to the "process_input_buffer" callback, the function acts as a pre-processor on the input stream -- TeX itself only ever sees and processes the corresponding math-mode macros.
Incidentally, it's assumed that these character combinations -- other than ... -- will only ever occur in math mode. Do let me know if this assumption isn't warranted. (... gets replaced with \dots, and \dots can occur in both text and math mode.)
A comment on the Lua code: Since the characters ., -, +, (, ), [, and ] are "special" in Lua search strings, they need to be escaped in order to lose the special meaning; this is done by prefixing % symbols to them. Fo instance, as . is the Lua "magic" character for any character, the pattern search string for ... must be written as %.%.%.. (This is also why the code shown below encases the Lua function in a luacode environment; in such an environment, % is not treated as a comment character.)

% !TEX TS-program = lualatex
\documentclass{article}
\usepackage{amsmath} % for context-sensitive handling of `\dots` macro
\usepackage{luacode}
\begin{luacode}
function do_subs ( buff )
buff = string.gsub ( buff , "<==", "\\Leftarrow ")
buff = string.gsub ( buff , "<=>", "\\Leftrightarrow ")
buff = string.gsub ( buff , "<=", "\\leq ")
buff = string.gsub ( buff , "<<", "\\ll ")
buff = string.gsub ( buff , "<%-%-", "\\leftarrow ")
buff = string.gsub ( buff , "<%->", "\\leftrightarrow ")
buff = string.gsub ( buff , ">>", "\\gg ")
buff = string.gsub ( buff , ">=", "\\geq ")
buff = string.gsub ( buff , "%-%->", "\\rightarrow ")
buff = string.gsub ( buff , "%-%+", "\\mp ")
buff = string.gsub ( buff , "%+%-", "\\pm ")
buff = string.gsub ( buff , "%.%.%.","\\dots ")
buff = string.gsub ( buff , "=%.", "\\doteq ")
buff = string.gsub ( buff , "==>", "\\Rightarrow ")
buff = string.gsub ( buff , "==", "\\equiv ")
buff = string.gsub ( buff , "<>", "\\neq ")
buff = string.gsub ( buff , "=%(", "\\subseteq ")
buff = string.gsub ( buff , "=%)", "\\supseteq ")
buff = string.gsub ( buff , "=%[", "\\sqsubseteq ")
buff = string.gsub ( buff , "=%]", "\\sqsupseteq ")
return buff
end
\end{luacode}
\AtBeginDocument{\directlua{luatexbase.add_to_callback (
"process_input_buffer" , do_subs, "do_subs" )}}
\begin{document}
$2x <= 4x - 2$
$<== <=> ==> <= >= << >> <-- --> -+ +- ... == <> =. =( =) =[ =] $
\bigskip
$a << b < c <= d >= e > f >> g$
$a <> b = c =. d == e$
$a <== b <-- c <-> d <=> e --> f ==> g$
$a +- b = -(-a -+ +b)$
$a, ..., z <> a + ...+ z$
$a =( b =) c =[ e =] f$
\end{document}
<active and then test for=as the next input token; b) if both glyphs are in the same font (they're not, in computer modern), try a ligature (but i don't remember whether ligatures work in math mode; i think not). i really don't recommend either method, but by investigating them, you'd probably learn something about tex's innards. – barbara beeton Aug 09 '13 at 12:21\geq==>anyway. – Chris H Aug 09 '13 at 12:27\let\<\le(andlet\<\ge). – Mark May 26 '16 at 00:32