Спасибо @zella и @Gustavo за их решения, это почти то, что мне нужно, но в их случаях объединенный источник генерирует только событие одного из источников. Так что фрагмент ниже делает именно то, что я хочу:
Observable.combineLatest(
source1.startWith(""),
source2.startWith(""),
BiFunction<String, String, String> { s1, s2->
s1 + s2
})