Here is my algorithm:
- count each name's frequency
 
- order by frequency descending and name
 
- cut into partitions as large as the maximum frequency
 
- number rows within each partition
 
- order by row number and partition number
 
An example: Names A, B, C, D, E
 step 1 and 2
 ------------
 AAAAABBCCDDEE
 step 3 and 4
 ------------
 12345     
 AAAAA
 BBCCD
 DEE
 step 5
 ------
 ABDABEACEACAD
The query:
with counted as
(
  select id, fruit, name, count(*) over (partition by name) as cnt
  from mytable 
)
select id, fruit, name
from counted
order by
  (row_number() over (order by cnt desc, name) - 1) % max(cnt) over (),
  row_number() over (order by cnt desc, name);
Common table expression (WITH clauses) and window functions (aggregation OVER) are available as of MySQL 8 or MariaDB 10.2. Before that you can retreat to subqueries, which will make the same query quite long and hard to read, though. I suppose you could also use variables instead, somehow.
DB fiddle demo: https://www.db-fiddle.com/f/8amYX6iRu8AsnYXJYz15DF/1