Без использования переменной:
SELECT a.name,
(SELECT COUNT(*)
FROM YOUR_TABLE b
WHERE b.name <= a.name) AS position
FROM YOUR_TABLE a
ORDER BY position
Проблема в том, что дубликаты получат одинаковый номер позиции.
Переменные - это единственная опция, чтобы не получить повторяющихся значений позиции:
SELECT a.name,
@rownum := @rownum + 1 AS position
FROM YOUR_TABLE a
JOIN (SELECT @rownum := 0) r
... без создания таблицы со столбцом с именем position
, для которого установлено значение AUTO_INCREMENT.
MySQL не поддерживает аналитические функции, такие как ROW_NUMBER, который вы бы использовали в этой ситуации.