1) Я не думаю, что SQLite использует какие-либо данные, относящиеся к конкретным потокам, поэтому создание соединения в одном потоке и использование в другом должно быть приемлемым (говорят, что это так для версии 3.5 и выше)
2) Я не думаю, что использование режима общего кэша даст какой-либо значительный выигрыш в производительности, поэкспериментируйте и убедитесь, что для его включения в каждом потоке требуется всего один оператор
3) Вам необходимо использовать блокировку типа Single-Writer-Multiple-Reader, а простые блокировки будут сериализовать все операции чтения и записи и сводить на нет любые преимущества в производительности при использовании нескольких потоков.
4 & 5) Любая операция чтения должна работать без проблем.