Optimizing a query that retrieves five rows for each letter of the alphabet
You have to use the REGEX_LIKE or briefly RLIKE function:

. . . . . .
WHERE RLIKE(table1.name, '^[:alpha:].*', 'i')
. . . . . .


Here ^ mean "from the very beginning of the string",
[:alpha:] is any alphabetical character
.* is any number of any characters and
'i' is a flag that mean case-insensitive comparison.  

RLIKE() function returns TRUE if matched and FALSE otherwise.  

Further reading can be found here: https://dev.mysql.com/doc/refman/8.0/en/regexp.html



UPDATE  

SELECT table1.id
     , table1.name
     , table1.url
     , IF(@tname &lt;&gt; @tname := table1.name, @cnt := 1, @cnt := @cnt + 1) AS cnt
  FROM table1
  LEFT JOIN table2 ON table1.aid = table2.aid
 WHERE RLIKE(table1.name, '^[:alpha:].*', 'i')
   AND table1.rank &gt; 0
   AND table1.view = 1
 ORDER BY table1.name ASC
        , table2.important DESC
        , table1.rank ASC
HAVING cnt &lt;= 5