Я что-то такое имел в виду:
CREATE TABLE employee (
id int GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
surname text NOT NULL,
first_name text NOT NULL,
patronymic text NOT NULL
);
INSERT INTO employee(surname, first_name, patronymic)
VALUES
('Петров', 'Алексей', 'Николаевич'),
('Иванова', 'Мария', 'Сергеевна'),
('Тарасов', 'Иван', 'Петрович'),
('Барто', 'Илья', 'Иванович'),
('Барто', 'Мария', 'Ивановна'),
('Иванов', 'Иван', 'Иванович');
PREPARE foo(text) AS
SELECT *
FROM (
SELECT e.id, e.surname, e.first_name, e.patronymic,
e.surname LIKE $1 AS s_matched, e.first_name LIKE $1 AS f_matched, patronymic LIKE $1 AS p_matched
FROM employee AS e
) AS nested_query
WHERE s_matched OR f_matched OR p_matched
ORDER BY NOT s_matched, NOT f_matched, NOT p_matched, surname, first_name, patronymic;
EXECUTE foo('Иван%');