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.