Concatenate large files in sql-like way with limited RAM
As @Marc B said, reading one row at a time is the solution.
About the join I would do the following (pseudocode: I don't know python).

"Select distinct Model from A" on first file A.csv

Read all rows, search for Model field and collect distinct values in a list/array/map

"Select distinct Model from B" on second file B.csv

Same operation as 1, but using another list/array/map

Find matching models

Compare the two lists/arrays/maps finding only matching models (they will be part of the join)

Do the join

Reading rows of file A which match model, read all the rows of file B which match same model and write a file C with join result. To this for all models.
Note: it's not particularly optimized.
For point 2 just choose a subset of matching models and/or read a part of rows of file A and/or B with maching models.
I have a large A.csv file (~5 Gb) with several columns. One of the columns is Model.
There is another large B.csv file (~15 Gb) with Vendor, Name and Model columns.
Two questions:
1) How can I create result file that combines all columns from A.csv and corresponding Vendor and Name from B.csv (join on Model). The trick is - how to do it when my RAM is 4 Gb only, and I'm using python.
2) How can I create a sample (say, 1 Gb) result file that combines random subsample from A.csv (all columns) joined with Vendor and Name from B.csv. The trick is, again, in 4 Gb of RAM.
I know how to do it in pandas, but 4 Gb is limiting factor I can't overcome (