쉐어드프퍼런스는 XML 파일입니다. 따라서 구조상 사이즈가 커지면 커질 수록 속도가 떨어지게 됩니다. 그리고 shared preference 는 타입에 안전하지 않습니다. 모든 타입을 내부적으로는 String으로 읽고 쓰고 해서 처리합니다. 그리고 님한테 필요한 부분인데 비동기처리가 약합니다. 파일을 읽고 쓰는 작업은 IO에 해당하므로 네트워크 작업과 마찬가지로 백그라운드 쓰레드에서 처리하는게 좋습니다. 테스트를 먼저 해보시구요, 4MB면 XML로 처리하기에는 좀 부담스러운 크기일 수 있습니다.
대안으로는 DB 와 Jetpack DataStore가 제일 접근이 용이한 방법 같습니다. DB는 Room을 쓰시면 될 것 같은데, 파일 한개 처리하는 용도로는 좀 과한듯 하고, DataStore가 좀 더 적합해 보입니다.
https://developer.android.com/topic/libraries/architecture/datastore
DataStore 에는 두가지 타입이 있는데, 해당 문서를 잘 읽어보시고 적합한 옵션을 선택하시길 바랍니다. 참고로, 읽기/쓰기는 백그운드쓰레드에서 코루틴으로 처리하실 수 밖에 없도록 디자인되어 있어요.
참 Room의 경우는 필요한 DB에 데이터를 미리 넣은 상태로 앱을 배포할 수도 있습니다. 이 부분이 중요하시다면 DB가 더 나은 옵션일 수도 있을 것 같습니다.