Cita:  Sin embargo, esta solución supone que para subir o bajar de posición un registro, hay que modificar el "view_index" de TODOS los demás registros, además que el cálculo del valor de dicho campo es muy pesado
    No necesariamente tienen que cambiar el 
view_index de todos los demás registros ni hacer complicados cálculos. 
Simplemente haste una función que intercambie valores de 
view_index, se vería como:  
intercambia_lugares(id1, id2); 
Por dentro, la función nada más toma el view_index de cada uno e intercambia valores, pero sólo se atacaron dos registros de tu tabla.