이론적으로 SharePrefrence, File, DB 등 어떤 저장소를 사용하던 상관은 없습니다. 데이터가 많아진다면 type safe, 비동기 처리의 지원 부족 등의 이유로 SharedPreference는 그다지 권장하지 않는 옵션이긴 합니다. 유저의 세팅같은 아주 간단한 것들을 저장하기에 적합하도록 설계가 되었기 때문입니다. Jetpack에서 type safe 한 대체라이브러리를 지원하기 시작했는데, 아직은 초장기 버전인 것 같습니다.
혹, 여기에 기능을 더 추가해서 저장소에 더 많은 데이터를 저장해야 한다면(예를 들면, 히스토리 기능, 틀린 문제 모아보기 등등) Room같은 DB가 더 적합한 선택이 될 겁니다.
그리고 마지막 Question의 위치는 저장소의 유형과는 전혀 상관이 없습니다. 어떻게 구현하느냐의 문제입니다. 이 문제를 접근하시는 방법은 사용자가 문제를 넘길 때 문제의 위치를 저장하던가, 아니면 라이프 사이클 이벤트를 오버라드 해서 (액티비티 콜백, 라이프사이클 콜백, ProcessLifecycle 등등의 옵션이 있습니다.) onStop같은 데서 현재 사용자가 풀고 있는 문제의 위치를 저장하면 될 것 같습니다. 그리고 퀴즈화면에 들어오면 먼저 저장된 문제의 위치를 읽어와서 저장된 값이 존재한다면, 문제의 인덱스를 체크해서 인덱스가 안전한 범위이면 거기서부터 보여주면 되구요, 그렇지 않은 경우라면 문제를 처음부터 보여주면 될 것 같습니다. 만약 인덱스가 벗어난 경우는 에러처리를 하셔야 겠죠.
일단은 구현이 쉽고 변경이 쉬운 쪽으로 구현을 하시면 될 것 같아요.
저같은 경우는 예전에 퀴즈관련 앱을 공부삼아 릴리즈 했었는데, Kotlin, Clean Architecture, ViewModel + LiveData, Room DB + FireStore 를 사용했었습니다. 퀴즈, 문제와 답을 나타내는 데이터 구조만 잘 가져가면 로직자체는 그렇게 어렵지 않을 듯 합니다.