Using index with large key_len
Look at the differences between the two EXPLAINs...

ALL  NULL       NULL   1144
REF  new_index  const     1


The first looked at ALL 1144 (approximate) rows of the table

The second used new_index, checking against a "constant", finding 1 (approximate) row.  Clearly faster.

The 503 may be 2+3*167, Perhaps the column is VARCHAR(167) CHARACTER SET utf8 NOT NULL?  The "2" is overhead for "VAR"; the "3" is the max byte length of a utf8 character.  About the only use for "503" is exactly what I just did -- deduce something about the index in question.

Or maybe it is a VARCHAR(125) CHARACTER SET utf8mb4 NULL?  2+4*125+1; the "1" is for a NULL flag.

The size of the "key_len" does not matter, except that there are limits -- 767, 3072, and possibly others, depending on version, etc.

Index "prefixing" (as danblack mentioned) is problematic.  It is often not used when you think it should.  I recommend avoiding it in most cases.  This is a case where you might need it, assuming you can't shrink the TEXT column:

CREATE TABLE ...
    foo TEXT NOT NULL, ...
    INDEX(foo(167)) ...