add-face-text-property is a built-in function in `C source code'.

(add-face-text-property START END FACE &optional APPEND OBJECT)

Add the face property to the text from START to END.
FACE specifies the face to add. It should be a valid value of the
`face' property (typically a face name or a plist of face attributes
and values).

If any text in the region already has a non-nil `face' property, those
face(s) are retained. This is done by setting the `face' property to
a list of faces, with FACE as the first element (by default) and the
pre-existing faces as the remaining elements.

If optional fourth argument APPEND is non-nil, append FACE to the end
of the face list instead.

If optional fifth argument OBJECT is a buffer (or nil, which means the
current buffer), START and END are buffer positions (integers or
markers). If OBJECT is a string, START and END are 0-based indices
into it.